1.关键词typedef
typedef的名字是类型重命名,可以理解成将一个复杂的类型重命名成一个简单的字符,效果简化了代码的书写。
int main ()
{
unsigned int a = 1;
return 0
}
typedef unsigned int abb
int main()
{
abb a = 1;
return 0:
}
上面两个代码效果是一模一样的。
2.关键词static
(1)修饰局部变量-称为静态局部变量
局部变量的作用域在他所在的大括号的范围内,局部变量的生命周期是进入大括号是建立出作用域是销毁。static在修饰局部变量是出作用域是不销毁。static的本质是改变了存储位置,由栈区到静态区,静态区变量是不销毁,影响了局部变量的生命周期,扩大到整个工程。
(2)修饰全局变量-称为静态全局变量
全局变量具有链接属性。全局变量的生命周期是整个工程,如图1,全局变量存储在静态区。static修饰的全局变量由外部链接属性变成内部链接属性,如图2,这个时候全局变量的作用域变成了所在的文件上。
图1
图2
(3)修饰函数-称为静态函数
函数具有外部链接属性,如图3.static修饰的函数时,外部链接属性就变成内部链接属性,只能在这个文件内使用,如图4。
图三
图四
3.关键词-register
在我们电脑中存储设备有寄存器,高速缓存,内存,硬盘。造价由由高到低,存储速度由快到慢。
在C语言中register是建议编译器将变量存储到寄存器中。
int main()
{
register int a =0;
}
4.#define定义常量和宏
#define可以定义一个常量,不可改变。
#define定义宏
#define可以定义宏,宏是完成替换的
在上图中M是宏名,(x,y)是宏的参数,参数是无类型的,((x)*(y))是宏体。宏的具体原理是int c =((a)*(b))。
5.指针
(1)内存
在我们电脑中内存被分为一个一个空间,每一个空间的大小是一个字节,为了快速寻找每一个空间的内容,计算机将每一空间进行编号,编号以0和1为主,在我们电脑(默认64位)有64个地址线,每一个地址线代表了一个0或1,说明地址最多有2的64次方中,也就是说64位电脑理论上最多支持2的64次方字节的大小的内存,在我们电脑中经常使用二进制转换为16进制表示内存,当一个变量占用多个空间是默认以第一个作为这个变量的地址,例如图5
图5
在内存监视窗口可以看到地址从右往左看可以发现地址后面是内存中的数据,代表了存入内存的a是1.可以打印出地址,如图6.
图6
在内存中,编号称作地址,也称为指针,而存储指针的变量叫做指针变量,我们习惯把他叫做指针。如图7.
图7
其中int说明指针的对象是int类型,*说明b是指针变量。只要数据存放进指针变量,变量就认为是地址。
*p是解引用操作符,是通过指针变量存放的地址,找到指针变量所指向的对象,*p就是p指向的对象。
图8
(2)指针变量的大小
指针变量的大小取决于地址的大小,而地址的大小却决于电脑的操作位数,如果为64位就是8个字节,32位那么就是4个字节大小。
6.结构体
由于生活中有许多大小不能用数据类型完全的表示出来,于是C语言就给了自定义类型的能力,而自定义类型中有一种叫结构体,struct,结构体是把单一类型组合在一起的方法。
在书写结构体时并不向内存申请空间,只有代码运行时申请空间。
大括号中内容是结构体的成员。[]中数字可以理解成运行中向内存申请空间。
结构体指针变量.成员名,结构体指针变量->成员名,就能调动结构体中数据了。