C 语言

关注公众号 jb51net

关闭
首页 > 软件编程 > C 语言 > C变量和全局变量能否重名

C语言变量和全局变量能否重名问题

作者:Code repairman

这篇文章主要介绍了C语言变量和全局变量能否重名问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

C语言变量和全局变量能否重名

解答

全局变量和局部变量是按照变量的作用域划分的。

简单地说,局部变量是定义在函数内部的变量;全局变量是定义在函数之外的变量。

全局变量可以为本文件中其他函数所共用。

局部变量和全局变量可以重名,局部变量会屏蔽全局变量。要使⽤全局变量,要在变量名前添加" :: "。

心得

局部变量和全局变量是可以重名的,因为它们的作用域不同。

在函数中,默认使用的是局部变量。

全局变量和局部变量重名了会怎么样

在交流群里面看到这样一个问题:

为什么这个程序中下面我定义的void型函数smart在全局变量前声明了,但是在man函数中调用了smart函数,m的值打印出来还是0。

#include<stdio.h>

int m;
void smart(void);

int main(void)
{
	printf("m = %d.\n", m);
	smart();
	printf("m = %d.\n", m);
	//m+=1;
	//printf("m = %d.\n", m);
	
	
	return 0;
}

void smart(void)
{
	int m = 25;
	
}

说实话,这个问题对于C语言有一个简单理解的肯定明白问题在哪里。但是,群里面人讲了半天没讲到重点,还是有点抓急。有讲局部变量函数执行结束自动释放的,所以全局变量的m没有被改变。有讲作用域不同的。千奇百怪的回答。

因为,能够搜到这篇文章的,大概率都是新手小白,我也就不会讲太深奥的东西了,尽量以简单易懂的语言讲明白。

全局变量和局部变量同名编译器是如何处理

(1)如果在函数内部同时存在一个局部变量和一个全局变量,它们的名字相同,那么在函数内部使用该变量时,将优先使用局部变量。

(2)举个现实生活的例子,两个除了长相不同,其他都一样的角色。一个是游戏活动期间才能玩的角色A,一个是你永久拥有的角色B。

(3)根据上面这个举例,我们就很好理解了全局变量和局部变量同名情况了。

对于计算机而言,全局变量和局部变量究竟是什么?

(1)我们都知道,对于计算机而言,他本质上只能够识别0和1。哪些所谓的代码,变量名,其实都是给人类看的。因此,我们人类看到全局变量和局部变量名字一样,但是对于计算机而言是不一样的。

(2)这个将人类看的懂的语言,变成计算机能够看懂的01语言需要通过编译器来决定。

(3)当你在代码中写了一个全局变量m和一个局部变量m。编译器就会开辟两个不同的地址分别存放全局变量m和局部变量m。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文