开发者

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

开发者 https://www.devze.com 2024-08-21 10:48 出处:网络 作者: Code repairman
目录C语言变量和全局变量能否重名解答心得全局变量和局部变量重名了会怎么样全局变量和局部变量同名编译器是如何处理对于计算机而言,全局变量和局部变量究竟是什么?总结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

    精彩评论

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