1.变量:变量代表一个有名字的、具有特定属性的一个存储单元。它用来存放数据,也就是存放变量的值。在程序运行期间,变量的值是可以改变的。变量必须先定义后使用。变量名和变量值是两个不同的概念。变量名实际上是以一个名字代表的一个存储地址。在对程序编译连接时由编译系统给每一个变量名分配对应的存储地址。从变量中取值,实际上是通过变量名找到对应的内存地址,从该存储单元中读取数据。
2.符号常量:用#define指令,指定用一个符号名称代表一个常量。如#define PI 3.14
注意:符号常量不是变量,符号常量不占用内存,只是一个临时变量,在预编译后这个符号就不存在了,故不能对符号常量赋以新的值。
3.转义字符\o、\oo、\ooo(o代表一个八进制数字)输出结果为与该八进制码对应的字符
printf("\101");//输出结果为A;101八进制换算成十进制为65,对应的ASCII字符为A
转义字符\xh[h...]其中h代表一个十六进制数字,输出结果为与该十六进制码对应的字符
printf("\x1B");//输出结果为ESC控制符,1B换算为十进制为27,27对应的ASCII字符为ESC
4.常变量
const int a = 3;
a被定义为一个整型变量,指定其值为3,而且在变量存在期间其值不能改变。
常变量与常量的异同是:常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。可以说常变量是有名字的不变量,而常量是没有名字的不变量。有名字就便于在程序中被引用。
5.C99标准新增的数据类型:双长整型long long int、布尔型bool、指针类型*
说明:C标准并没有具体规定各种类型数据所占用存储单元的长度,这是由各个编译系统自行决定的。C标准只要求long类型的长度不短于int型,short类型不长于int型。
即:sizeof(short)<=sizeof(int)<=sizeof(long)<=sizeof(long long)
整型变量的变量值在存储单元中都是以补码形式存储的,存储单元中的第一个二进制位代表符号。
关于补码:正整数的补码就是原码,负整数的补码为以绝对值求反码,反码加1就是补码
整型变量前可以加unsigned修饰符,来指定这个整型变量是无符号整型,输出时指定输出格式无符号十进制数格式输出%u,在将一个变量定义为无符号整型后,不应向它赋予一个负值,否则会得到错误的结果。如:unsigned short price = -1;printf("%d\n",price);//输出结果为65535
原因:-1转换为补码:11111111 11111111,其左面第一位不代表符号,按%d格式输出,就是65535即2的16次方-1
6.字符型数据存储方式是存储其ASCII码,所以C99也把字符型数据作为整数类型的一种。
C99除了允许使用char类型(单字节)外,还允许使用whcar_t类型(宽字符),其类型定义在头文件stddef.h中。
7.字符'1'和整数1是不同的概念,字符'1'只是代表一个形状为'1'的符号,在需要时按原样输出,在内存中以ASCII码形式存储,占1个字节,字符'1'的ASCII码为49,存储为00110001,整数1是以二进制补码方式存储的,占两个或4个字节0000 0000 0000 0001
8.字符类型也属于整型,也可以使用signed和unsigned修饰符。如果在定义变量时既不加signed又不加unsigned,C标准并未规定是按signed char处理还是按unsigned char处理,由各编译系统自己决定。这是和其他整型变量处理方法不同的,如int默认等同于signed int。
如果将一个负整数赋给有符号字符型变量是合法的,但它不代表一个字符,而是作为一字节整型变量存储负整数。
如:
signed char c = -6;
printf("%d", c);//输出结果为-6
8.在C语言中,实数是以指数形式存放在存储单元中的。
编译系统为每一个float型变量分配4个字节,数值以规范化的二进制数指数形式存放在存储单元中。在存储时,系统将实型数据分成小数部分和指数部分两个部分,分别存放。小数部分的小数点前面的数为0。在4个字节中,究竟用多少位来表示小数部分,多少位来表示指数部分,C标准并无具体规定,由各C语言编译系统自行决定。
9.float型变量的有效数字为6位,double型变量的有效数字为15位
#includeint main() { float a; a = 10000 / 3.0; printf("%f\n", a); return 0; }
输出3333.333252
因为float型的精度只有6位,所以从左边开始的第七位数字以后的数字并不保证是绝对正确的。