C语言(存储类的关键字)

1、存储类的关键字

1.1、auto
(1)auto关键字在C语言中只有一个作用,那就是修饰局部变量
(2)auto修饰局部变量,标志这个局部变量是自动局部变量,自动局部变量分配在栈上。(也就是说如果不初始化,那么值就是随机的)
(3)平时定义局部变量时就是定义的auto的,知识省略了auto关键字而已,所以auto的局部变量其实就是默认定义的普通的局部变量
1.2、static
(1)static关键字在C语言中有2种方法,而且这两种用法彼此没有任何关联,完全是独立的。
(2)static的第一种用法是:用来修饰局部变量,形成静态局部变量。静态局部变量和非静态局部变量的区别:存储类不同——静态局部变量分配在数据段/bss段上,而费静态局部变量分配在栈上。
(3)static的第二种用法是:用来修饰全局变量,形成静态全局变量
**注意:**要搞清楚静态全局变量和非静态全局变量的区别,区别在于链接属性上的不同。
分析:
(1)静态局部变量在存储类方面和全局变量一样
(2)静态局部变量在生命周期方面和全局变量一样
(3)静态局部变量和全局变量的区别是:作用于、链接属性。静态局部变量作用域是代码块作用域(和普通局部变量是一样的)、链接属性是无连接的;全局变量作用域是文件作用于(和函数是一样的)、链接属性是外连接。
1.3 register
(1)register的作用是:register修饰的变量(一般是全局变量),编译器会尽量将它分配在寄存器中。(平时分配的一般是在内存中的)。分配在寄存器中是一样的,只是读写效率会更高。所以register修饰的变量用在那种变量被反复高频率的作用,通过改善这个变量的访问效率可以极大地提升运行效率。
1.4、extern
(1)extern主要是用来声明全局变量,声明的目的主要是在a.c中定义全局变量而在b.c中使用该变量
(2)C语言程序中的编译时以单个.c源文件为单位的,因此编译a.c时只考虑a.c中的内容(不会考虑b.c的内容),这就导致a.c中使用了b.c中定义的变量时在编译时报错。解决方案是应该在a.c中使用g_b之前先声明g_b,声明就是告诉a.c我在别的文件中定义了g_b,并且它的原型和声明的一样,将来在链接的时候链接器会在别的.o文件中找到这个同名变量。声明一个全局变量就要用到extern关键字。
1.5、volatile
(1)volatile字面意思就是可变的、易变的。C语言中volatile用来修饰一个变量,表示这个变量可以被编译器之外的东西改变。
1.6、restrict
(1)C99中才支持,所以很多延续C99的编译器是不支持restrict关键字的,gcc支持。
(2)restrict只用来修饰指针,不能修饰普通变量。
1.7、typedef
(1)typedef的作用是为一种数据类型定义一个新名字。
(2)typedef的应用:常规变量类型的定义、指针类型的定义、结构体等定义、数组类型的定义
(3)typedef和define的区别:define只是简单的字符串代换,实在与处理完成的,而typedef是在编译时处理的,不是简单的代换,而是对类型说明符重新命名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值