开发者

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

目录
  • C语言变量和全局变量能否重名
    • 解答
    • 心得
  • 全局变量和局部变量重名了会怎么样
    • 全局变量和局部变量同名编译器是如何处理
    • 对于计算机而言,全局变量和局部变量究竟是什么?
  • 总结

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

    解答

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

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

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

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

    心得

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

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

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

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

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

    #include<stdio.h>
    
    int m;
    void smart(void);
    
    int main(void)
    {
    	printf("m = %d.\jsn", 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)举个现实生活的例子,两个除了长相不同,其他都UpeIxkjEAT一样的角色。一个是游戏活动期间才能玩的角色A,一个是你永久拥有的角色B。

    • 虽然他们的数值是一样的,但是对于绝大多数玩家而言,在活动期间大概率还是会优先用限时角色A。
    • 但是呢,游玩角色,打怪能够升级。可是角色A在活动结束之后,就会消失,那么活动期间你所得到的所有经验值都会消失。并不会反馈给永久角色B。
    • 最后,你只能愤愤不平,被官方摆了一套。

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

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

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

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

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

    • 当你在smart()函数调用m变量的时候,编译器就会告诉机器,你应该操作的是地址A。
    • 当smart()函数调用结束的时候,编译器就会告诉机器,你应该操作的是地址B。同时机器会自己将地址A释放掉。
    • 那么你在地址A做的操作是无效的。

    总结

    以上为个人经验,希望能给大家一个参考,也希UpeIxkjEAT望大家多多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新开发

    开发排行榜