社区
C语言
帖子详情
全局变量与局部变量的疑问?
GNNUXXL
2019-01-21 04:27:08
同一个表达式,一个定义成全局变量,一个定义成局部变量,为啥结果不一样呢?
...全文
333
14
打赏
收藏
全局变量与局部变量的疑问?
同一个表达式,一个定义成全局变量,一个定义成局部变量,为啥结果不一样呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
耕者走兔
2019-02-02
打赏
举报
回复
这个问题我的确不知道,如果有知道的请讲解讲解,谢谢。
下面的回答是猜的。
在全局变量下,编译器只是简单的对表达式进行静态求值,然后把表达式替换为值。也就是5-6=-1.。
在局部变量下,编译器不能进行静态求值,值是在运行时取得,所以求值结果就是 6-6=0.。
赵4老师
2019-01-30
打赏
举报
回复
关于C,C++表达式求值顺序
http://blog.csdn.net/fefe82/article/details/37833767
,
http://bbs.csdn.net/topics/370153775
晗生缘
2019-01-30
打赏
举报
回复
按照我的理解是:a-=++a,可以分成两 步:1.a=a+1; 2. a=a-a; 如果a为局部变量,那么a=a+1=5+1=6;此时a=6, 那么a=a-a=6-6=0; 如果a为全局变量,那么a=a+1=5+1=6,但此时的a的含义并不等于全局变量a,而是系统中有一个中间变量如t存储了这个值(6),所以当执行a=a-a时,就变成了a=a-t=5-6=-1; 但不同编译器会有不同的结果,你这个应该是在UNIX系统的Shell编译器吧
starytx
2019-01-30
打赏
举报
回复
新手都喜欢玩这个 ++,--,还研究的一本正经
日立奔腾浪潮微软松下联想
2019-01-30
打赏
举报
回复
什么版本gcc?虽然说求值顺序未定义,但是同一个编译器,只是全局变量和局部变量的不同,对同一个表达式就出现不同的求值结果,也是比较奇葩的。就我的测试结果,C++Builder 7.3、VC++ 14.0、intel c++ 15.0、gcc 5.1.0,32位/64位、开/不开优化,输出都是0
景行清欢
2019-01-29
打赏
举报
回复
不同位置作用域不同
棉猴
2019-01-29
打赏
举报
回复
编译器不同,得到的结果就不同
huyi_beyond
2019-01-29
打赏
举报
回复
不要把精力放在这种牛角尖上,写语法清晰的代码。
耕者走兔
2019-01-28
打赏
举报
回复
是啊,为什么同一个编译器编译结果不一致尼
Top_Spirit
2019-01-21
打赏
举报
回复
这种式子不建议用,也不建议去深度研究,根据编译器的不同,给出的结果也是不同的,总之不太建议去用或者写这种式子。
636f6c696e
2019-01-21
打赏
举报
回复
最近这种日经帖特别多,请百度序列点 在一个序列点对同一个变量多次赋值产生的结果是不可预期的。
lin5161678
2019-01-21
打赏
举报
回复
引用 2 楼 qq_34300249 的回复:
定义的地方不一样,。。。。
和定义的地方没关系
a -= ++a这个表达式是未定义行为
结果没意义
如果写的是符合要求的表达式
这段代码 不管是全局变量还是局部变量结果都是一样的
qq_34300249
2019-01-21
打赏
举报
回复
定义的地方不一样,。。。。
自信男孩
2019-01-21
打赏
举报
回复
a -= ++a
这样的表达式不建议写,也不建议深究。因为这样的表达式具有歧义性,不同的编译器可能处理不一样。
《C语言基础》 之 第6章 函数
课程内容:main函数、自定义函数 之 函数定义、自定义函数 之 函数调用、自定义函数 之 传参和返回值、使用codeblocks IDE进行多文件编程、多文件编程/警告/函数声明、使用头文件进行函数声明 、为何防止头文件重复包含、头文件中到底放了些什么东西、什么时库函数标准io库、数学库、标准库、
全局变量
和
局部变量
Python
全局变量
和
局部变量
(超详细,纯干货,保姆级教学)
定义看起来一愣一愣的,没关系我也是。我将会用实例的方式为你解释。我们也知道在Python中有一个global关键字用来声明一个
全局变量
。那这玩意儿到底什么用。来看看global keykey="first()的key"print("进入first函数,给key赋新值,此时print(key)得到***"+key+"***\n")print("进入second函数,但是没有给key赋新值,此时print(key)得到***"+key+"***\n")key="third()的key"
python的
全局变量
和
局部变量
但是第二次传入False就要小心了,它会报错(UnboundLocalError: local variable ‘x’ referenced before assignment),原因是虽然control是False,后面的语句不会运行到,但是对于python而已,即使没有运行到x的赋值,return x的时候,会把x当初
局部变量
,而这时的
局部变量
x没有进行赋值操作。对于z值其实也没有异议,这里打出值来,就是想让大家看看,z值没赋值之前是empty,等两次赋值,值是基于最后一次赋值。
局部变量
,
全局变量
以及关键字static,extern
局部变量
,
全局变量
以及关键字static,extern 变量通常是在函数的开头进行定义,但不同位置定义,其有效范围是否不同,该
疑问
也称为变量的作用域,根据作用域的不同,分为
全局变量
和
局部变量
局部变量
定义变量时,若位于函数的开头(函数内部定义)或者函数内部的复合语句(程序块)内(for,if, while语句)定义,则这些变量称为
局部变量
, 在函数内部定义的变量其作用域为定义的位置到函数结尾 若在函数复合语句内定义,则作用域为复合语句内部(开头到结尾)
全局变量
一个源文
Python变量作用域详解:
局部变量
与
全局变量
在Python中,变量的作用域指的是可以访问该变量的代码范围。
局部变量
的作用范围限于函数内部,而
全局变量
的作用范围覆盖整个程序。
局部变量
是在函数内部定义的变量,其作用范围仅限于函数内部。
全局变量
是在函数外部定义的变量,其作用范围覆盖整个程序。在编写代码时,需要注意
局部变量
和
全局变量
的作用域规则。关键字声明变量为
全局变量
,以便在函数内部修改
全局变量
的值。在上面的示例中,函数内部定义了一个同名的
局部变量
。在上面的示例中,虽然函数内部定义了一个同名的变量。的错误,因为该变量的作用域仅限于函数内部。
C语言
69,373
社区成员
243,079
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章