Static
static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
static 修饰局部变量
改变局部变量的生命周期,本质上是改变了局部变量的存储位置,让局部变量不再是在栈区上开辟空间,而是直接在静态区上开辟空间,从而使得局部变量拥有和全局变量一样的生命周期,即随着整个程序生成和销毁。
在编译环节的编译阶段编译器就会为被 static 修饰的局部变量分配空间,所以C程序在运行的过程中会直接跳过 static 修饰的语句,也就是说,在第二次及以上甚至第一次调用 test 函数时 static int a = 0; 这条语句都不会被执行。
static修饰全局变量
改变了全局变量的外部链接属性(可以在其他源文件内被访问),使其变成内部连接属性(只能在本文件内部被访问),给我们的感觉是全局变量的作用域变小了。
static修饰函数
改变了函数的外部链接属性(可以在其他源文件内被访问),使其变成内部连接属性(只能在本文件内部被访问),给我们的感觉是函数的作用域变小了。
参考:https://blog.youkuaiyun.com/m0_62391199/article/details/123517767
Const
const修饰的全局变量为只读,其值不可修改。如果在程序中企图对const修饰的变量进行修改,那么程序就会报错。
const 是 constant 的缩写,是恒定不变的意思,也翻译为常量、常数等。很不幸,正是因为这一点,很多人都认为被 const 修饰的值是常量。这是不精确的,精确的说应该是只读的变量,其值在编译时不能被使用,因为编译器在编译时不知道其存储的内容。
const 推出的初始目的,正是为了取代预编译指令,消除它的缺点,同时继承它的优点(define 不是关键字)。
const 修饰变量
用 const

本文详细介绍了C语言中的static、const和volatile三个关键字的作用。static修饰局部变量使其生命周期延长至程序结束,存储在静态区;修饰全局变量则限制其作用域为当前文件。const用于创建只读变量,提供编译时的检查。volatile则用于指示变量可能由外部不可见的因素改变,防止编译器优化。
最低0.47元/天 解锁文章
2689

被折叠的 条评论
为什么被折叠?



