C语言-变量问题

变量即可变的量

在内存中开辟一块地址,存放数据

int a = 0;

把这块整型空间命名为a,a即是变量名

将其中的数据替换

a = 1;

此时这块空间存放的数据变为了1

局部变量

存放在栈区,生命周期在它的作用范围内

void hi(){

int a = 1;

}

这里的a即局部变量,定义在函数内部,它的作用范围只在hi这个函数内,函数执行完后,

局部变量a就会被销毁

全局变量

存放在静态区,生命周期是整个程序的开始到结束

int a = 1;

int main(){

return 0;

}

这里的变量a定义在函数之外,地位等同于函数,在程序的任何地方都可以调用它

如果局部变量和全局变量重名,那么优先使用离得近的,也就是局部变量

外部变量

extern修饰的变量是告诉编译器,这个变量在其他文件中定义了,叫他自己去找

文件a.c

int a = 10;

文件b.c

extern int a;

int main(){

printf("%d\n",a);

}

运行时,先编译发现变量a是外部变量,在链接文件时,找到a.c定义的全局变量a的值为10,最终打印a的值为10

这里全局变量a具有外部文件可链接的性质,为什么我要提这一点,请看下面的静态变量

这里顺带提一嘴,extern还可以用来修饰函数,用法是一样的

静态变量

使用static修饰的变量

类似于全局变量,存放在静态区中,在同一个文件里作用相当于全局变量

那不同点在哪里?

文件a.c

static int a = 10;

文件b.c

extern int a;

int main(){

printf("%d\n",a);

}

当运行这段程序时,发现编译出错了

原因在于被static修饰的变量是没有外部可链接的性质的,也就是说extern无法找到它

但是static修饰的变量在它所在的文件中作用范围依然等同于全局变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值