本章节描述C语言中的数据,包括数据的基本类型,作用域,链接属性,存储类型。
1.基本数据类型
在C语言中有四种基本数据类型:整形,浮点型,指针,聚合类型
1.1 整形
整形包括字符、短整形、整形、长整形,它们都分为有符号和无符号。整形的类型与最小范围如下表
类型 | 最小范围 |
char | 0 ~ 127 |
signed char | -127 ~ 127 |
unsigned char | 0 ~ 255 |
short int | -(2^15 - 1) ~ (2^15 - 1) |
Unsigned short int | 0 ~ 2^16 - 1 |
Int | -(2^15 - 1) ~ (2^15 - 1) |
Unsigned int | 0 ~ 2^16 - 1 |
Long int | -(2^31 - 1) ~ (2^31 - 1) |
Unsign long int | 0 ~ 2^32 - 1 |
一 整形字面值
十进制:123
八进制:0123
十六进制:0x123
二 枚举类型
enem number{one,two,three,four};
枚举值默认从第一个符号常量从0开始,以后没个符号常量逐个加1。
也可以定义每个符号常量的值:
enem Jar_Type{CUP = 8,PING = 16};
1.2 浮点型
浮点型包括float、double、long double。
1.3 指针
2.常量
常量的样子跟变量完全一样,只是它们的值不能修改。使用const关键字来描述。
int *p;//指针
int const *p;//指针指向的值不可改
int* const p;//指针不可改
int *const *p;//指针和指针指向的值都不可改
3.作用域
当变量在程序的某个部分被声明时,它只有在程序的一定区域才能被访问。
3.1 代码块作用域
位于一对花括号之间的所有语句成为一个代码块。任何在代码块开始位置的声明标识符都具有代码块作用域。
3.2 文件作用域
任何在所用代码块之外声明的标识符都具有文件作用域。它表示这些标识符从它们声明之处直到它所在的源文件结尾处都是可以访问的。
3.3 原型作用域
原型作用域只适用于函数原型中声明的参数。
3.4 函数作用域
它只适用于语句标签,语句标签用于goto语句。
4.链接属性
当不同的源文件中出现了相同的标识符,这些标识符是同一个实体还是不同实体。标识符的链接属性决定如何处理在不同文件中出现的标识符。链接属性有三种external、internal、none。
none:总是被当做不同的实体。也就是说同一个标识符声明了多次都被单做不同的实体。
external:标识符不论声明多少次,位于几个源文件都表示同一个实体。
internal:标识符在同一个源文件内的所有声明都指同一个实体,但位于不同源文件的多个声明则分属不同的实体。
5.存储类型
变量的存储类型是指存储变量值的内存类型。有三个地方可以用于存储变量:普通内存、运行时堆栈、硬件寄存器。
变量的缺省存储类型取决于它的声明位置。凡是在任何代码块之外声明的变量总是存储在静态内存中。这类变量叫静态变量,它们在程序运行开始之前创建,在程序的整个执行期间始终存在。
在代码块内部声明的变量的缺省存储类型为自动的,称为自动变量。在程序执行到代码块的时候,自动变量才被创建,当程序执行离开该代码块的时候,自动变量被销毁。
在代码块声明的变量加上static,则该变量的存储类型从自动变为静态。
关键字register可以用于自动变量的声明,提示它们存储在机器的硬件寄存器中。
6.static关键字
当它用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修改标识符的链接属性,从external改为internal。
当它用于代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量改为静态变量。