level 6
西安恩仪联教育
楼主
c开发之重要关键字:
第一:重量级number one---static
static 是 C 语言中非常重要的关键字,它的作用完全取决于你用在什么地方,主要分3 种场景.
1. 修饰局部变量(函数内部的变量)
把栈上的普通局部变量 → 变成静态局部变量
生命周期:从程序启动到结束(只初始化一次)
作用域:仍然只在函数内部可见
2. 修饰全局变量
作用:限制全局变量的作用域
普通全局变量:整个工程所有文件都能访问
static 全局变量:只能在当前 .c 文件内访问
static 全局变量 = 文件私有变量
防止不同文件的全局变量重名冲突
3. 修饰函数
作用:限制函数的作用域
普通函数:整个工程都能调用
总结:
static 函数:只能在当前 .c 文件内调用
static 局部变量:生命周期延长,只初始化一次
static 全局变量:作用域限制,仅当前文件可见
static 函数:作用域限制,仅当前文件可调用
static在模块化编程中向外部隐藏内部细节的好方法。
第二:重量级number two---extern
extern 是 C 语言里用来声明外部变量 / 函数、解决跨文件访问问题的关键字,和你刚才问的 static 正好是一对 “相反” 的用法。
1. extern 修饰全局变量
作用:告诉编译器:这个变量不是在本文件定义的,是在别的 .c 文件里定义的
只做声明,不分配内存
2. extern 修饰函数
作用:声明一个外部函数,表示函数定义在别的文件
函数默认自带 extern 属性,所以平时写函数声明时可以省略
第三:重量级number three---const
被 const 修饰的内容,不能直接修改。
1、修饰普通变量
是只读变量,不能再赋值
编译时常量(尽量在定义时就赋值)
作用类似 “只读变量”,不是真正的宏常量
2、修饰指针
(1)指向常量的指针
const int *p;
int const *p;
指针指向的内容不能改
指针本身可以变
(2)常量指针(指针本身不能变)
int *const p = &a;
指针本身不能改(不能再指向别的变量)
指向的内容可以改
(3) 指针和内容都不能改
const int *const p;
3、修饰函数参数(函数参数是指针时最常用)
表示函数内部通过该指针不能修改指针指向空间内容:
void func(const int *arr) {
//通过 arr不能改它指向的空间中内容
}
4、修饰全局变量
const int MAX = 100;
全局只读,不能修改
比 #define 更安全(有类型检查)
2026年04月21日 06点04分
1
第一:重量级number one---static
static 是 C 语言中非常重要的关键字,它的作用完全取决于你用在什么地方,主要分3 种场景.
1. 修饰局部变量(函数内部的变量)
把栈上的普通局部变量 → 变成静态局部变量
生命周期:从程序启动到结束(只初始化一次)
作用域:仍然只在函数内部可见
2. 修饰全局变量
作用:限制全局变量的作用域
普通全局变量:整个工程所有文件都能访问
static 全局变量:只能在当前 .c 文件内访问
static 全局变量 = 文件私有变量
防止不同文件的全局变量重名冲突
3. 修饰函数
作用:限制函数的作用域
普通函数:整个工程都能调用
总结:
static 函数:只能在当前 .c 文件内调用
static 局部变量:生命周期延长,只初始化一次
static 全局变量:作用域限制,仅当前文件可见
static 函数:作用域限制,仅当前文件可调用
static在模块化编程中向外部隐藏内部细节的好方法。
第二:重量级number two---extern
extern 是 C 语言里用来声明外部变量 / 函数、解决跨文件访问问题的关键字,和你刚才问的 static 正好是一对 “相反” 的用法。
1. extern 修饰全局变量
作用:告诉编译器:这个变量不是在本文件定义的,是在别的 .c 文件里定义的
只做声明,不分配内存
2. extern 修饰函数
作用:声明一个外部函数,表示函数定义在别的文件
函数默认自带 extern 属性,所以平时写函数声明时可以省略
第三:重量级number three---const
被 const 修饰的内容,不能直接修改。
1、修饰普通变量
是只读变量,不能再赋值
编译时常量(尽量在定义时就赋值)
作用类似 “只读变量”,不是真正的宏常量
2、修饰指针
(1)指向常量的指针
const int *p;
int const *p;
指针指向的内容不能改
指针本身可以变
(2)常量指针(指针本身不能变)
int *const p = &a;
指针本身不能改(不能再指向别的变量)
指向的内容可以改
(3) 指针和内容都不能改
const int *const p;
3、修饰函数参数(函数参数是指针时最常用)
表示函数内部通过该指针不能修改指针指向空间内容:
void func(const int *arr) {
//通过 arr不能改它指向的空间中内容
}
4、修饰全局变量
const int MAX = 100;
全局只读,不能修改
比 #define 更安全(有类型检查)