变量都有作用域,链接属性,和存储类型3个属性,这三个属性决定了变量的作用域和生存期的问题
在c语言中包含4中类型,
整形
浮点型
指针
聚合类型(数组,结构体等)
-------------------------------------------》整形
整形包括字符型,短整形,整形和长整型,他们都分为有符号的和无符号的类型
听上去长整型似乎要比短整形长,但是不一定
我们只是规定,长整型至少要和整形一样长,而整形至少要和短整形一样长
k&rc并没有规定长整型要比短整形长,只是规定了长整型不能比短整形短,ANSI 标准加入了一个规范,说明了各种整形值得最小范围,当各个环境之间的可移植性非常重要的时候,这个规范就显得很重要
头文件limit.h中说明了这个问题,这个文件种定义了整形的有符号的最大值和最小值,以及有符号的最大值
-----------char
尽管char表面上存储的是字符,但是本质上就是小的整数,在缺省的条件下,char要不是signed char,就是unsigned char ,这取决于编译器的不同,这就意味着不同的机器上可能有不同范围的char类型的值,因此只有char位于两者的交集之中,这个程序才是可移植的
所以我们显示的声明char的有无符号类型时,可以提高程序的可移植性,但是当一个机器处理signed得心应手的时候,我们将它改为unsigned时,效率可能会降低,同样,有些库函数把他们的参数设置为char类型,当你显示的声明的时候,可能会带俩兼容性的问题,所以显示的声明char类型未必就是上策
只有char形变量显示的声明的时候,才可以对她进行算术运算
----------后缀&&前缀
关于常亮,我们可以再前面加上0表示八进制 0x表示十六进制
也可以在后面加上u,U,L,l来带面无符号和长整型
但是字符常量就是int类型,我们不能再后面加上后缀
当我们想使用一个字面量表示某些位的时候,我们通常写出八进制或者十六进制
---------浮点数
浮点数家族包括float,double,long double,ansI标准规定了long double至少要和double一样长,double至少要和float一样长,标准同时规定了最小范围,就是所有浮点类型至少能容纳10E-37到10E+37之间的任何值
头文件float.h定义了FLT_MIN,FLT_MAX DBL_MAX ,DBL_MIN , LDBL_MAX ,LDBL_MIN 分别表示各类类型的最大值和最小值
浮点数字在缺省的条件下都是double类型的,除非在末尾加上l 或者f表示long double和float
-----------------------------》指针
字符串通常存储在一个数组中,因为c语言没有显示的字符串数据类型,之所以选择NULL作为字符串的结束标识符,是因为他是一个不可打印的字符
字符串常量---》
我们在声明字符串常量会生成一个字符常量的指针,该指针指向字符串的首地址,当字符串常量出现在表达式中,表达式所使用的值是这些字符的地址,而不是字符的本身,所以我们将字符串常量赋值给一个指向字符的指针,,,但是我们不能将字符串赋值给一个数组,因为字符串的直接值是一个指针,间接地才可以使用字符本身
1:
c数组值的关心的是,编译器并不检查程序对数组下标的引用是否合法的在范围之内
2:隐式声明:
c语言有几种声明,如果不显示的声明其类型,编译器会默认类型,如函数如果不声明返回的类型,编译器会根据程序推断出返回类型
K&RC编译器而言是可以判断出来的,但是ANSI 编译器会认为这是非法的