const、static、extern三个关键字
默认情况下,C语言的全局变量是全世界都可以访问的,也就是全局变量可以跨文件访问。
extern可以引用全局变量
例如,如果有一个全局变量int money = 100;
extern int money 意为:引用这个全局变量,而非定义一个全局变量
注意:不允许出现两个变量名一样的全局变量
函数和变量一样,都可以被全局引用
static的作用:
static 修饰的全局变量作用域仅限于当前文件 所以被static修饰的全局变量不能被引用
static修饰的局部变量只会初始化一次,在整个程序运行过程中始终存在
const : const只修饰它右边的内容,被const修饰的内容都是常量、都是不能再修改的
int * const p1; p1是常量 *p1是变量
int const * p1; *p1是常量 p1是变量
const int *p1;
const int *const p1; p1和 *p1都是常量
int const * const p1;
const int age = 20;
int *p = &age;
*p = 30; 不行
static :
1> 被static修饰的全局变量\常量
1) 仅限于当前文件访问
2) 改变了作用域
2> 被static修饰的局部变量
1) 只会占用一块内存,在整个程序运行过程都不会销毁,只会初始化一次
2) 改变了生命周期,并没有改变作用域
extern : 可以引用一个全局变量\常量
默认全局变量如果没有用static修饰,全部是可被extern的(即全局可访问,但可被访问到的前提是:在其他地方访问这个全局变量必须要加extern修饰符,笔者称之为可被extern)
比如:我在A.m文件中声明并定义了一个全局变量BOOL isSelected = NO;如下图:
我如果在B.m文件中声明同名的变量BOOL isSelected = NO;会报错,截图如下:
解决这个问题的办法有两种:
第一种:A.m文件中的全局变量声明为static的,代表只能在当前文件访问(当前文件可见):static BOOL isSelected = NO;
第二种:B.m文件中用extern引用A.m文件中申明定义的这个全局变量:引用方式:extern BOOL isSelected;如下图:
采用第二种方式:代表B.m文件和A.m文件使用的是同一个BOOL类型的变量!!!如果A.m文件把isSelected 改为YES,那么B.m文件使用这个isSelected时需要注意了,此时isSelected也是YES!!!
注意:
1. 上面extern BOOL isSelected;这句代码不是声明变量,而是引用变量。
2. 一般情况下,如果其他文件中不会访问本文件中的全局变量,那么建议用static关键字进行修饰,例如:static BOOL isSelected = NO;
【推荐】FFA 2024大会视频回放:Apache Flink 的过去、现在及未来
【推荐】中国电信天翼云云端翼购节,2核2G云服务器一口价38元/年
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步