C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。
C 语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C 语言能以简易的方式编译、处理低级存储器。C 语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。尽管 C 语言提供了许多低级处理的功能,但仍然保持着跨平台的特性,以一个标准规格写出的 C 语言程序可在包括类似嵌入式处理器以及超级计算机等作业平台的许多计算机平台上进行编译。
简介
C 语言是一门面向过程的计算机编程语言,与 C++、Java 等面向对象编程语言有所不同。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、仅产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。C 语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。C 语言一般只比汇编语言代码生成的目标程序效率低 10%~20%。因此,C 语言可以编写系统软件。
当前阶段,在编程领域中,C 语言的运用非常之多,它兼顾了高级语言和汇编语言的优点,相较于其它编程语言具有较大优势。计算机系统设计以及应用程序编写是 C 语言应用的两大领域。同时,C 语言的普适较强,在许多计算机操作系统中都能够得到适用,且效率显著。
冯.诺依曼在 1945 年提出了现代计算机的若干思想,被后人称为冯.诺依曼思想,这是计算机发展史上的里程碑。自 1945 年至今大多采用其结构,因此冯.诺依曼被称为计算机之父。他的体系结构计算机由运算器、控制器、存储器、输入设备、输出设备五大部件构成。 C 语言拥有一套完整的理论体系经过了漫长的发展历史,在编程语言中具有举足轻重的地位。
主要特点
C 语言是一种结构化语言,它有着清晰的层次,可按照模块的方式对程序进行编写,十分有利于程序的调试,且 c 语言的处理和表现能力都非常的强大,依靠非常全面的运算符和多样的数据类型,可以轻易完成各种数据结构的构建,通过指针类型更可对内存直接寻址以及对硬件进行直接操作,因此既能够用于开发系统程序,也可用于开发应用软件。通过对 C 语言进行研究分析,总结出其主要特点如下:
(1)简洁的语言
C 语言包含的各种控制语句仅有 9 种,关键字也只有 32 个,程序的编写要求不严格且以小写字母为主,对许多不必要的部分进行了精简。实际上,语句构成与硬件有关联的较少,且 C 语言本身不提供与硬件相关的输入输出、文件管理等功能,如需此类功能,需要通过配合编译系统所支持的各类库进行编程,故 c 语言拥有非常简洁的编译系统。
(2)具有结构化的控制语句
C 语言是一种结构化的语言,提供的控制语句具有结构化特征,如 for 语句、if⋯else 语句和 switch 语句等。可以用于实现函数的逻辑控制,方便面向过程的程序设计。
(3)丰富的数据类型
C 语言包含的数据类型广泛,不仅包含有传统的字符型、整型、浮点型、数组类型等数据类型,还具有其他编程语言所不具备的数据类型,其中以指针类型数据使用最为灵活,可以通过编程对各种数据结构进行计算。
(4)丰富的运算符
C 语言包含 34 个运算符,它将赋值、括号等均是作运算符来操作,使 C 程序的表达式类型和运算符类型均非常丰富。
(5)可对物理地址进行直接操作
C 语言允许对硬件内存地址进行直接读写,以此可以实现汇编语言的主要功能,并可直接操作硬件。C 语言不但具备高级语言所具有的良好特性,又包含了许多低级语言的优势,故在系统软件编程领域有着广泛的应用。
(6)代码具有较好的可移植性
C 语言是面向过程的编程语言,用户只需要关注所被解决问题的本身,而不需要花费过多的精力去了解相关硬件,且针对不同的硬件环境,在用 C 语言实现相同功能时的代码基本一致,不需或仅需进行少量改动便可完成移植,这就意味着,对于一台计算机编写的 C 程序可以在另一台计算机上轻松地运行,从而极大的减少了程序移植的工作强度。
(7)可生成高质量、目标代码执行效率高的程序
与其他高级语言相比,C 语言可以生成高质量和高效率的目标代码,故通常应用于对代码质量和执行效率要求较高的嵌入式系统程序的编写。
语言组成
数据类型
C 的数据类型包括:整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。
常量与变量
常量其值不可改变,符号常量名通常用大写。
变量是以某标识符为名字,其值可以改变的量。标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。变量在编译时为其分配相应存储单元。
数组
如果一个变量名后面跟着一个有数字的中括号,这个声明就是数组声明。字符串也是一种数组。它们以 ASCII 的 NULL 作为数组的结束。要特别注意的是,中括号内的索引值是从 0 算起的。
指针
如果一个变量声明时在前面使用 * 号,表明这是个指针型变量。换句话说,该变量存储一个地址,而 *(此处特指单目运算符 * ,下同。C 语言中另有 双目运算符 *) 则是取内容操作符,意思是取这个内存地址里存储的内容。指针是 C 语言区别于其他同时代高级语言的主要特征之一。
指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值,不同于 return(z)这样的仅能得到一个返回值。
指针是一把双刃剑,许多操作可以通过指针自然的表达,但是不正确的或者过分的使用指针又会给程序带来大量潜在的错误。
字符串
C 语言的字符串其实就是以’’字符结尾的 char 型数组,使用字符型并不需要引用库,但是使用字符串就需要 C 标准库里面的一些用于对字符串进行操作的函数。它们不同于字符数组。使用这些函数需要引用头文件<string.h>。
文件输入/输出
在 C 语言中,输入和输出是经由标准库中的一组函数来实现的。在 ANSI C 中,这些函数被定义在头文件<stdio.h>;中。
标准输入/输出
有三个标准输入/输出是标准 I/O 库预先定义的:
stdin 标准输入
stdout 标准输出
stderr 输入输出错误
运算
C 语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则就会显得十分重要。
编程开发
编译器
GCC,GNU 组织开发的开源免费的编译器
MinGW,Windows 操作系统下的 GCC
Clang,开源的 BSD 协议的基于 LLVM 的编译器
Visual C++ :: cl.exe,Microsoft VC++自带的编译器