一、基本数据类型
(一)整型家族
1.整型变量
变量就是指在程序运行过程中可以发生变化的量
整型变量包括短整型(short int)、整型(int)、和长整型(long int),都分为有有符号和无符号;两种,它们都是以二进制存放的,每种类型占不同的地址空间,所以其能表示的数值范围也都有所限制。当前机器各种类型的取值范围可在“limits.h”文件里查看
2.整型常量
常量就是指在程序运行过程中不能被改变的量,C语言中整型常量可以用八进制整数、十进制整数和十六进制整数三种。其中八进制的数要以“0”作为前缀开头,十六进制需要以“0x”作为前缀开头。另外,整型常量可在结尾加上“L”或“l”代表长整型,“U”或“u”代表无符号整型。
(二)实型家族
实型家族也就是浮点数。
1.实型变量
实型变量又可以分为单精度(float)、双精度(double)、和长双精度(long double
)三种。
2.实型常量
C语言中的实型常量只采用十进制。有十进制数形式和指数形式,所有的浮点常量都被默认为double类型。
(三)字符型家族
1.字符变量
字符常量可以看做是整形变量的一种,其标识符为“char”,一般占一个字节(8bits),
也分为有符号和无符号两种,字符常量实际上完全可以当做是整型变量的一种。当它用于存储字符常量时,实际上是以该字符的ASCII码值存储到内存单元里。
2.字符常量
字符常量是指用单括号括起来的一个字符,如“a”、“D”、“+”、“?”等都是字符常量。
使用字符常量时有以下注意:
* 字符常量只能用单引号括,不能使用其他的符号
* 字符常量只能是单个的字符,不能是字符串
* 字符可以是字符集中任意字符,但数字被定义为字符型之后就不能参与数值运算了,如定义字符5,与数字5 是不同的,此时只能以5的ASCII码值来进行运算
除此之外,还存在一些转义字符
(四)枚举家族
对于有些变量的取值被限定在一定的范围内,C语言提供了一种称为枚举的类型,在枚举的类型中定义为该枚举类型的变量取值不能超过定义的范围。
枚举类型定义的一般格式为
enum 枚举名
{
枚举值表
};
在枚举值表中应罗列出所有的可用值,这些值也称为枚举元素
(五)指针家族
1.指针的概念
指针即为地址,在计算机中所有的数据都是存放在存储器中的,一般可以把存储器的一个字节称为一个存储单元,不同的数据类型所占的存储单元不等,为了正确的访问这些存储单元,必须为每个单元编号,内存单元的编号也叫作地址,找到内存单元的地址几可以找到所需的内存单元。通常也把这个地址称为指针。
2.指针常量
事实上,指针常量只有一个NULL(空地址)。虽然指针是一个如0x00100011这样的字面值,但因此编译器负责把变量辅助给计算机内存中的位置,程序员在事先根本无法知道某个特定变量在内存中会存储在哪个位置,并且,但一个函数每次被调用时,他的自动变量(局部变量)可以分配的内存位置都不同。因此,把指针常量表示成为数值字面值几乎是没有用处的。
3.字符串常量
字符串常量是用一对双引号括起来的一串字符,双引号只起定界的作用,双引号括起的字符串中不能是双引号和反斜杆(),他们在转义字符中有特有的含义。
C语言中,字符串常量在内存中存储时会自动在末尾加一个“串结束标志,即ASCII码值为0的字符NULL,常用“\0"表示。因此,程序中长度为n个字符的字符串常量,在内存中占用的空间为n+1。
三、常量与变量
(一)变量的意义
1、定义形式
|
|
基本类型 | 关键字 |
---|---|
整型 | int,unsigned,short,long |
浮点型 | float ,double |
枚举型 | enum |
字符型 | char ,unsigned |
指针类型 | 指针类型 * |
2.变量的作用域
变量的有效性范围即变量的作用域,变量的作用域是由变量标识符的作用域决定的。
(1)局部变量
在函数内部定义的变量即局部变量。其仅由其被定义的模块内部所访问,即局部变量在进入模块时生成(压入堆栈),在退出模块是消亡(弹出堆栈)。
(2)全局变量
全局变量贯穿整个程序,可被本文件中任意一个函数所使用。在整个程序执行的期间有效。
需注意一点,对于局部变量的定义和声明,可以不用区分,但对于全局变量,其定义和声明不是一回事,全局变量的定义必须在所有的函数外,且只能定义一次,一般形式为:
[extern] 类型说明符 变量名 , 变量名...
其中extern可以省去不写,
而全局变量的声明出现在需要使用该外部变量的各个函数内,在整个函数内,可以出现多次,全局变量的声明一般形式为:
extern 类型说明符 变量名,变量名...
全局变量在定义是已经分配了地址单元,并可作初始赋值。全局变量的声明不能在出现赋初始值,只是表明耀使用此变量。
3.变量的存储方式
分为静态存储的动态存储两种。
静态存储通常是在变量定义时就分配一定的存储空间,且一直保持不变,直至整个程序结束。
动态存储是在程序的执行过程中,使用它时才分配的存储单元。
由此可知,静态存储变量是一直存在的,而动态变量时而存在时而消失。
C语言中萃变量的存储类型说明有以下四种:
- auto自动变量
- static静态变量
- register寄存器变量
- extern 外部变量
其中自动变量和寄存器变量属于动态存储方式,外部变量和静态变量属于静态存储方式。
以下对四种存储类型进行说明。
(1)自动变量的类型说明符:auto
此类型是C语言程序中使用最广泛的一种类型。函数内未加存储类型的变量均视为自动变量。
(2)静态变量的类型说明符:static
静态变量的类型说明符是static,属于静态存储方式,但有一点,属于静态存储方式的不一定是静态变量(如外部变量)。
2.typedef
typedef可称为C语言的关键字,其作用是作为一种数据类型定义一个新名字。
其基本用法如下:
typedef 数据类型 自定义数据类型
嵌入式开发中涉及可移植性的问题时,typedef就会非常引人注目了,通过tupedef可以为标识符其一个统一的名称,这样在对标识符修改时,只需修改typedef的内容就可以了。
3.常量定义
(1)const常量定义
int const a = 10;
以上语句定义了一个整型常量a,其初始值为10,且不能被修改。
```c
int const * a;
int *const a ;
第一条语句说明指针a指向的数据单元的内容是不能被改变的,而这个指针本身的地址是可以被改变的,而第二条语句正好相反。
(2)define定义常量
define实际是一条预处理指令,其实际用途远大于定义常量这一功能
使用define定义常量实际是进行符号替换,其定义方法为:
#define 符号名 替换列表
在linux内核中,也广泛使用define来定义常量。