基本数据类型
C语言中基本数据类型包括 整型(包括字符型),浮点型,空类型,指针类型,构造类型(结构体,联合体,数组)
头文件 limits.h 定义一系列宏,表示各个类型的最大和最小值
浮点类型分为三种:float,double,long double
一般32位系统上 float 占四个字节,double 占八个字节
相等的类型声明:
short /signed short /short int /signed short int
unsigned short /unsigned short int
int /signed int /signed
unsigned /unsigned int
long /signed long /signed long int
unsigned long /unsigned long int
只有 char 类型 分为 signed char /char /unsigned char 三种不同的类型,char 类型不是默认为 signed char 类型
字面量
字面量是字面量常量的缩写,这个一个实体,指定了自身的值,并且不允许发生改变,这个特点非常重要,因为C语言允许命令常量
字面量包括整型字面量,浮点字面量,字符型字面量
整型字面量占用字节大小取决于字面量的后缀,后缀可以是 U,L,L 或者小写的 u l l
添加后缀 L 表示该字面量为 long 类型,U 表示 unsigned 类型,也可以组合使用 UL(ul)表示 unsigned long
整型字面量也可以用 8 进制或者 16 进制表示,8进制以 0 开头,16进制以 0x 开头字符型字面量,它的类型总是 int 类型,并且不可以使用 U 和 L 的后缀
浮点类型字面量默认都是 double 类型的,后缀加上 L(l)表示它是一个 long double 类型,或者加上 F(f)表示它是一个浮点类型
声明和定义
声明只是通知编译,此变量已经关联到一块内存上,同时此变量的变量名已经被占用 比如 extern int i 就是一个声明
定义是创建了对象并且为对象创建了内存 比如 int i,定义了变量 i ,并且分配了 sizeof(int) 大小的内存
链接属性和存储类型
链接属性:
当组成一个程序的各个源文件分别被编译后,所有的目标文件从那些一个或者多个函数库中引用的函数链接在一起,形成可执行文件,标志符的链接属性决定如何处理不同的文件出现的标志符,标志符的作用域和链接属性相关
链接属性分为三种:external,internal,none
- internal 链接属性的标志符在同一个文件所有声明都指向一个实体
- external 链接属性的标志符无论声明多少次,不同的源文件声明的都指向一个实体
下面的程序,b,c,f 的链接属性是 external,其余为none
如果另一个文件也声明了标志符 b,并且调用了函数 c,它们实际上访问的是这个函数的实体
其他文件要使用标志符 b 和 函数 c,需要使用 extern 声明,用以通知编译器 标志符 b 和函数 c 的存在
- 关键字 extern 和 static
关键字 extern 和 static 用于在声明中修改标志符的链接属性,如果某个声明在正常情况下具有 external 链接属性,加上 static 关键字可以将其链接属性变为 internal 比如:
static int b;
变量 b 就会被这个源文件私有,其他源文件如果链接到 b 的同名变量,那么将是另一个不同的变量
函数加上 static 声明,表示此函数为该源文件内部私有,其他源文件,其他源文件也可以定义同名函数,那将是另外一个函数
static int c(int d)
常量
C语言中的常量分为整数常量,浮点常量,字符常量和字符串常量;
C语言常量类型 | 说明 |
---|---|
整数常量 | 整数常量可以是十进制、八进制或十六进制的常量,前缀指定基数:0x 或 0X 表示十六进制,0 表示八进制,不带前缀则默认表示十进制; |
浮点常量 | 浮点常量由整数部分,小数点,小数部分和指数部分组成; 当使用小数形式表示时,必须包含整数部分,小数部分,或同时包含两者;当使用指数形式表示时, 必须包含小数点、指数,或同时包含两者,带符号的指数是用 e 或 E 引入的 |
字符常量 | 字符常量可以是一个普通的字符(例如 'x')、一个转义序列(例如 '\t'),或一个通用的字符(例如 '\u02C0') |
字符串常量 | 字符串字面值或常量是括在双引号 " " 中的 |
转义字符含义表:
\ \ 字符
' ' 字符
?? ?字符
" " 字符
? ? 字符
\a 警报铃声
\b 退格键
\f 换页符
\n 换行符
\r 回车
\t 水平制表符
\v 垂直制表符
\ooo 一到三位的八进制数
\xhh . . . 一个或多个数字的十六进制数
C语言中常量的定义形式有两种:
- 使用 #define 预处理器,
- 使用 const 关键字
常量类型的后缀包括 F,U,L,使用小写(f,u,l)也是一样的效果
将 F 或者 f 附加到带小数点的数字,表示float类型的常量
将 L 附加到带小数点的数,表示 long double 类型
对于整数类型,U 表示无符号类型(unsigned int),L 表示long int 类型,UL 表示unsigned long int类型
C99 允许通过指定后缀LL(或者ll)指定 long long 类型
Example | date type |
---|---|
1 123 21000 -234 | int |
34567L -34L | long int |
10000U 987u 40000U | unsigned int |
129.34F 4.34e-3f | float |
123.23 1.0 -0.98763241 | double |
1001.2L | long double |