本文目录 - [一、计算机常识](http://www.cnblogs.com/mjios/archive/2013/05/03/3052593.html#label0) - [二、程序设计语言发展史](http://www.cnblogs.com/mjios/archive/2013/05/03/3052593.html#label1) - [三、C语言简史](http://www.cnblogs.com/mjios/archive/2013/05/03/3052593.html#label2) - [四、C语言的特点](http://www.cnblogs.com/mjios/archive/2013/05/03/3052593.html#label3) - [五、C语言的作用](http://www.cnblogs.com/mjios/archive/2013/05/03/3052593.html#label4) - [六、C语言的版本问题](http://www.cnblogs.com/mjios/archive/2013/05/03/3052593.html#label5) 前面已经给大家介绍了iOS开发相关的一些基础知识,比如[学习iOS开发需要什么准备](http://www.cnblogs.com/mjios/archive/2013/04/27/3046049.html)、[iOS开发的前景](http://www.cnblogs.com/mjios/archive/2013/04/28/3049595.html)等等。在《[开篇](http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html)》这讲中说过:其实iOS开发就是开发iPhone\iPad上的软件,而要想开发一款软件,首先要学习程序设计语言。iOS开发需要学习的主要程序设计语言有:C语言、C++、Objective-C,其中C++、Objective-C都是以C语言为基础,从C语言衍生出来的。从这讲开始,我们就暂时抛开iOS相关的知识,沉下心来学习传说中的C语言。正式学习之前,先提醒一句:学习一门语言的语法是比较枯燥的事,很像是在学习1+1等于几,不可能说,学习C语言语法过程中就能马上做出一些好看的iPhone界面效果。大家要沉得住气,所谓苦尽甘来,没有语法的积累,如何能编写出好看的界面呢? [回到顶部](http://www.cnblogs.com/mjios/archive/2013/05/03/3052593.html#labelTop) ##一、计算机常识 在学习C语言之前,先要了解一些计算机常识 ### 1.计算机只能识别0和1 - 大家都知道,计算机要通电才能工作,说白了,它跟电视、洗衣机一样,都是电器。电器都有个共同的能力:懂得判断通电还是断电,通电就能工作,断电就停止工作。因此,从根本上讲,计算机只能识别电信号:高电平信号(通电)、低电平信号(断电),它只知道某个开关是通电还是断电。我们用1代表高电平,0代表低电平。 - 也就说,计算机只能识别0和1。 ### 2.二进制 因为计算机只能识别0和1,因此计算机所能识别的指令和数据都是用二进制数(0和1)来表示的。所谓二进制,就是用0和1来表示所有的数。不过我们日常生活中最常用的是十进制,用0~9来表示所有的数 **1, 二进制指令** 给计算机灌输一些指令,它就能执行相应的操作,而计算机只能识别由0和1组成的指令。在计算机发展初期,计算机的指令长度为16,即以16个二进制数(0或1)组成一条指令,例如,用1011011000000000这条指令,是让计算机进行一次加法运算。因此,如果要想计算机执行一系列的操作,就必须编写许多条由0和1组成的指令,可以想象的到,这个工作量是如此巨大。 **2,二进制数据** 平时我们在计算机中存储的一些数据,比如文档、照片、视频等,都是以0和1的形式存储的。只不过计算机解析了这一大堆的0和1,以图形界面的形式将数据展示在我们眼前。 [回到顶部](http://www.cnblogs.com/mjios/archive/2013/05/03/3052593.html#labelTop) ##二、程序设计语言发展史 我们可以利用程序设计语言来编写程序,再将编好的程序运行到计算机上,计算机就能够按照程序中所说的去做。从计算机诞生至今,程序设计语言大致经历了3个发展阶段:机器语言、汇编语言、高级语言。其中,C语言属于高级语言。 ### 1.机器语言 **1,什么是机器语言** 在计算器诞生初期, 所有的计算机程序都是直接用计算机能识别的二进制指令来编写的,也就是说所有的代码里面只有0和1。这种程序设计语言就是“机器语言”。这些由0和1组成的二进制指令,又叫做“机器指令” **2,优点** - 由于机器语言编写出来的代码是能被计算机直接识别的,因此机器语言是直接对硬件产生作用的,程序的执行效率非常高。 - 机器语言能直接访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。 **3,缺点** - 用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令和指令的涵义,指令又多又难记。 - 编出的程序全是些0和1的指令代码,可读性差,还容易出错。 - 由于机器语言是直接对硬件产生作用的,对硬件的依赖性很强,因此不同型号计算机的机器语言又不一样。也就是说,如果2台不同型号的机器想实现一样的功能,需要编写2套完全不同的代码。 可以看出,机器语言很难掌握和推广,现在除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。 ### 2.汇编语言 **1,什么是汇编语言** - 由于机器语言的种种弊端,严重影响开发效率,后面就出现了汇编语言。汇编语言其实就是符号化的机器语言,它用一个符号(英文单词、数字)来代表一条机器指令。比如,在机器语言中,用1011011000000000这条指令,是让计算机进行一次加法运算;而在汇编语言中,用英文单词“ADD”就可以表示加法运算。一个有意义的英文单词,很明显比一串又臭又长的二进制指令,直观好记多了。 - 由于计算机只能识别0和1,用汇编语言编写的代码是不能被计算机所识别的,像刚才的“ADD”,计算机肯定不知道是什么意思。因此,用汇编语言编写的代码需要翻译成二进制指令后,才能被计算机识别。这个翻译的工作交给“编译器”去做。 **2,优点** - 对比机器语言,汇编语言的代码可读性好 - 汇编语言能像机器语言一样,可以直接访问、控制计算机的各种硬件设备,如磁盘、存储器、CPU、I/O端口等。使用汇编语言,可以访问所有能够被访问的软、硬件资源。 - 目标代码简短(目标代码就是经编译器翻译过后的二进制代码),占用内存少,执行速度快。(计算机中所有程序的运行都是在内存中进行的,因此内存的性能对计算机的影响非常大。其作用是用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。只要计算机在运行中,CPU就会把需要运算的数据调到内存中进行运算,当运算完成后CPU再将结果传送出来,内存的运行也决定了计算机的稳定运行。)计算机的内存是有限的,因此一个应用程序运行时所占用的内存越少越好。 **3,缺点** - 汇编语言是面向机器的,通常是为特定的计算机或系列计算机专门设计的。因此,不同的机器有不同的汇编语言语法和编译器,代码缺乏可移植性,也就是说,一个程序只能在一种机器上运行,换到其他机器上就不能运行。 - 汇编语言的符号非常多、难记,即使是完成简单的功能也需要大量的汇编语言代码,很容易产生BUG,难于调试 - 使用汇编语言必须对硬件非常了解,开发效率很低,周期长且单调 ### 3.高级语言 由于汇编语言依赖于硬件,代码可移植性差,符号又多又难记,于是人类就发明了非常接近自然语言的高级语言。后面要学习的C语言就是高级语言。 **1,优点** - 简单、易用、易于理解,语法和结构类似于普通英文,且远离对硬件的直接操作,使得一般人经过学习之后都可以编程,而不用太熟悉硬件知识 - 写出来的程序更加简洁。比如要计算2个数的和,在高级语言中可以写得非常简洁:d=a+b;。但是在机器语言和汇编语言中,就需要几条甚至几十条指令,而且不同机器还要编写不同的指令代码 - 用高级语言编写的同一个程序还可以在不同的机器上运行,具有可移植性 **2,注意** 用高级语言编写的程序不能直接被计算机识别,需要经编译器翻译成二进制指令后,才能运行到计算机上 [回到顶部](http://www.cnblogs.com/mjios/archive/2013/05/03/3052593.html#labelTop) ##三、C语言简史 - C语言于1972年发明,首次使用是用于重写UINX操作系统(UNIX以前主要是用汇编语言写的,它奠定了操作系统的基础) - 随着UNIX操作系统的成功,C语言也得到了大幅度地推广,被先后使用到大、中、小、微型主机上,至今还是世界上最流行、使用最广泛的高级程序设计语言之一 - C语言是一门面向过程的语言,非面向对象的语言。(究竟什么是面向过程、面向对象,暂时不用去理解,只需要知道C语言是面向过程就Ok了) 下面是2013年3月份的编程语言热门排行榜 ![](https://box.kancloud.cn/2016-05-07_572d603daf65b.png) 从C语言诞生至今,它的热度一点也没减过,前两名基本上都是Java和C [回到顶部](http://www.cnblogs.com/mjios/archive/2013/05/03/3052593.html#labelTop) ##四、C语言的特点 ### 1.丰富的运算符 计算机的基本功能就是计算,因此一门程序设计语言的计算能力是非常重要的。C语言提供了34种运算符,计算类型极其丰富,其中包括了最基本的加减乘除运算。 ### 2.丰富的数据类型 - C语言的生命力之所以如何强大,很大一部分是因为它拥有丰富的数据类型。 - 正因为C语言数据类型丰富,运算能力极强,因此很多数据库都是用C语言编写的,比如DB2、Oracle等。 ### 3.可以直接操作硬件  跟汇编语言一样,C语言可以直接操作硬件,允许直接对位、字节、地址进行操作(位、字节、地址是计算机最基本的工作单元),可以说几乎没有C语言做不了的事情。 ### 4.高效率的目标代码 目标代码,就是经编译器翻译后的二进制代码。C语言的目标代码执行效率非常高。 ### 5.可移植性好 在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。 上面所说的都是C语言的优点,它有个非常明显的缺点:语法限制不严格。这样就导致初学者对C语言语法不能理解得很透彻,而且在开发过程中也会带来很多容易忽略的问题。  [回到顶部](http://www.cnblogs.com/mjios/archive/2013/05/03/3052593.html#labelTop) ##五、C语言的作用 - 由于C语言具有强大的数据处理能力,而且允许直接访问内存地址,直接对硬件操作,因此它适于编写系统软件、图形处理、单片机程序、嵌入式系统开发甚至是用于科研。 - 很有游戏外挂都是用C语言写的 - 很多操作系统的底层都是用C语言写的,比如android  [回到顶部](http://www.cnblogs.com/mjios/archive/2013/05/03/3052593.html#labelTop) ##六、C语言的版本问题 从UNIX操作系统的成功后,C语言得到了广泛地应用,从大型主机到小型微机,都有C语言活跃的身影,也衍生了很多个版本的C语言。长期以往,C语言将可能成为一门有多个变种、松散的语言。一门正式的语言,肯定要有个标准才行,不然就乱套了。为了改变这种局面,1983年美国国家标准局(American National Standards Institute,简称ANSI)成立了一个委员会,开始制定C语言标准的工作。1989年C语言标准被批准,这个版本的C语言标准通常被称为ANSI C