目录
数据类型
C语言数据类型
byte
- 8位、有符号的以二进制补码表示的整数
- min : -128(-2^7)
- max: 127(2^7-1)
- default: 0
- 对应包装类:Byte
short
- 16位、有符号的以二进制补码表示的整数
- min : -32768(-2^15)
- max: 32767(2^15 - 1)
- default: 0
- 对应包装类:Short
int
- 32位、有符号的以二进制补码表示的整数
- min : -2,147,483,648(-2^31)
- max: 2,147,483,647(2^31 - 1)
- default: 0
- 对应包装类:Integer
long
- 64位、有符号的以二进制补码表示的整数
- min : -9,223,372,036,854,775,808(-2^63)
- max: 9,223,372,036,854,775,807(2^63 -1)
- default: 0
- 对应的包装类:Long
float
- 单精度、32位、符合IEEE 754标准的浮点数
- float 在储存大型浮点数组的时候可节省内存空间
- 浮点数不能用来表示精确的值,如货币
- default: 0.0f
- 对应的包装类:Float
double
- 双精度、64位、符合IEEE 754标准的浮点数
- 浮点数的默认类型为double类型
- double类型同样不能表示精确的值,如货币
- default: 0.0d
- 对应的包装类:Double
char
- char类型是一个单一的 16 位 Unicode 字符
- 最小值是 \u0000(即为0)
- 最大值是 \uffff(即为65,535)
- char 数据类型可以储存任何字符
- 对应的包装类:Character
boolean
- boolean数据类型表示一位的信息
- 只有两个取值:true 和 false
- 这种类型只作为一种标志来记录 true/false 情况
- 对应的包装类:Boolean
编程规范
代码缩进
代码缩进统一为4个字符。不采用空格,而用<Tab>键制表位。
变量、常量命名规范
在定义函数时,函数名的首字母要大写,其后的字母大小写混合。例如:
int AddTwoNum(int num1,int num2);
注释
尽量采用行注释。如果行注释与代码处于一行,则注释应位于代码右方。如果连续出现多个行注释,并且代码较短,则应对齐注释。例如:
1. int iLong; /*长度*/ 2. int iWidth; /*宽度*/ 3. int iHieght /*高度*/
关键字
标识符
标识符是什么?
在C语言中为了在程序的运行过程中可以使用变量、常量、函数、数组等,就要为这些形式设定一个名称,而设定的名称就是所谓的标识符。
C语言标识符应该遵守的一些命名规则
所有标识符必须由字母或下划线开头,而不能使用数字或者符号作为开头
int !number; /*错误,标识符第一个字符不能为符号*/ int 2hao; /*错误,标识符第一个字符不能为数字*/ int number; /*正确,标识符第一个字符为字母*/ int _hao; /*正确,标识符第一个字符为下划线*/
在设定标识符时,除开头外,其他位置都可以由字母、下划线或数字组成
int good_way; /*正确,标识符中可以有下划线*/
在标识符中,可以有数字
1. int bus7; /*正确,标识符中可以有数字*/ 2. int car6V; /*正确*/
英文字母的大小写代表不同的标识符,也就是说,在C语言中是区分大小写字母的
1. int mingri; /*全部是小写*/ 2. int MINGRI; /*全部是大写*/ 3. int MingRi; /*一部分是小写,一部分是大写*/
标识符不能是关键字
1. int int; /*错误!*/ 2. int Int; /*正确,改变标识符中的字母为大写*/
标识符的命名最好具有相关的含义
1. int a; /*代表长度*/ 2. int b; /*代表宽度*/ 3. int c; /*代表高度*/ 4. int iLong; 5. int iWidth; 6. int iHeight;
ANSI标准规定,标识符可以为任意长度,但外部名必须至少能由前8个字符唯一地区分
数据类型
常量
整型常量
无符号短整型
无符号短整型的取值范围是0~65535,而符号短整型的取值范围是-32768~+32767,这些都是16位整型常量的范围
整型
无符号短整型的取值范围是0~65535,而符号短整型的取值范围是-32768~+32767,这些都是16位整型常量的范围
实型常量
科学计数方式
科学计数方式就是使用十进制的小数方法描述实型,例如:
SciNum1=123.45; /*科学计数法*/ SciNum2=0.5458;
指数方式
有时候实型非常大或者非常小,这样使用科学计数方式是不利于观察的,这时可以使用指数方法显示实型常量。其中,使用字母e或者E进行指数显示,如45e2表示的就是4500,而45e-2表示的就是0.45。例如上面的SciNum1和SciNum2代表的实型常量,改使用指数方式显示这两个实型常量如下所示:
SciNum1=1.2345e2; /*指数方式显示*/ SciNum2=5.458e-1;
字符型常量
字符常量
使用单撇号括起一个字符,这种形式就是字符常量。例如,'A'、'#'、'b'等都是正确的字符
常量。在这里需要注意以下几点有关使用字符常量的注意事项。
字符常量中只能包括一个字符,不是字符串。例如:'A'是正确的,但是用'AB'来表示字符 常量就是错误的。
字符常量是区分大小写的。例如:'A'字符和'a'字符是不一样的,这两个字符代表着不同 的字符常量。
'这对单撇号代表着定界符,不属于字符常量中的一部分。
字符串常量是用一组双引号括起来的若干字符序列。如果在字符串中一个字符都没有,将其称作空串,此时字符串的长度为0。例如“Have a good day!”和“beautiful day”即为字符串常量。
C语言中存储字符串常量时,系统会在字符串的末尾自动加一个“\0”作为字符串的结束标志。
例如字符串“welcome”在内存中的存储形式如图所示。
转义字符
转义符号在字符常量中是一种特殊的字符。转义字符是以反斜杠“\”开头的字符,后面跟一个或几个字符。常用的转义字符及其含义如表所示。
变量
整型变量
整型变量是用来存储整型数值的变量。整型变量可以分为6种类型,其中基本类型的符号使用int关键字,在此基础上可以根据需要加上一些符号进行修饰,如关键字short或long。下表是这6种类型的介绍。
实型变量
实型变量也称为浮点型变量,是指用来存储实型数值的变量,其中实型数值是由整数和小数两部分组成的。实型变量根据实型的精度也可以分为3种类型,包括单精度类型、双精度类型和长双精度类型。下表是这3种类型的介绍。
字符型变量
字符型变量是用来存储字符常量的变量。将一个字符常量存储到一个字符变量中,实际上是将该字符的ASCII码值(无符号整数)存储到内存单元中。
字符型变量在内存空间中占一个字节,取值范围是-128~127。
定义一个字符型变量的方法是使用关键字char,例如要定义一个字符型的变量cChar,为cChar变量赋值为‘a’的方法如下:
char cChar; /*定义字符型变量*/ cChar= 'a'; /*为变量赋值*/
变量的储存类别
动态存储与静态存储
从变量的产生时间上可以分为静态存储和动态存储。
静态存储就是指程序运行分配的固定的存储方式,而动态存储则是在程序运行期间根据需要动态地分配存储空间
auto变量
auto关键字就是修饰一个局部变量为自动的,这意味着每次执行到定义该变量的时候,都会产生一个新的变量,并且对其重新进行初始化。
static变量
static变量为静态变量,将函数的内部和外部变量声明成static变量的意义是不一样的(有关函数的内容在本书的后续章节进行介绍)。不过对于局部变量来说,static变量是和auto变量相对而言的。尽管两者的作用域都是仅限于声明变量的函数之中,但是在语句块执行期间,static变量将始终保持它的值,并且初始化操作只在第一次执行时起作用。在随后的运行过程中,变量将保持语句块上一次执行时的值。
register变量
register变量称为寄存器存储类变量。使用register的目的在与让程序员指定把某个局部变量存放在计算机的某个硬件寄存器而不是内存中。这样的好处是可以提高程序的运行速度。不过,这只是反映了程序员的主观意愿,实际上编辑器可以忽略register对变量的修饰。
用户无法获得寄存器变量的地址,因为绝大多数计算机的硬件寄存器都不占用内存地址。而且,即使编译器忽略register而把变量存放在可设定的内存中,也是无法获取变量的地址的。
如果想有效地利用寄存器register关键字,必须像汇编语言程序员那样了解处理器的内部结构,知道可用于存放变量的寄存器的数量、种类以及工作方式。但是,在不同的计算机对于这些细节可能是不同的,因此,对于一个要具备可移植的程序来说,register的作用并不大。
extern变量
extern变量称为外部存储变量。extern声明了程序中将要用到但尚未定义的外部变量。通常,外部存储类都用于声明在另一个转换单元中定义的变量。
一个工程是由多个C文件组成的。这些源代码文件分别编译,然后链接成一个可执行模块。把这样的一个程序作为一个工程进行管理,并且生成一个工程文件来记录所包含的所有源代码文件。
混合运算
不同类型之间可以进行混合运算,例如10+'a'-1.5+3.2*6。
在进行这样的计算时,不同类型的数据要先转化成同一类型,然后进行运算。转化的方式如图所示。