社区
C++ 语言
帖子详情
局部static变量 同名问题
stone2317
2012-12-10 10:52:40
void fun1()
{
static int a=9;
printf("%d",a);
}
void fun2()
{
static int a;
printf("%d",a);
}
void main()
{
fun1();
fun2();
}
结果为什么fun2()中a还是初始0,不是9呢,局部静态变量也存储在全局区的呀??
...全文
1861
4
打赏
收藏
局部static变量 同名问题
void fun1() { static int a=9; printf("%d",a); } void fun2() { static int a; printf("%d",a); } void main() { fun1(); fun2(); } 结果为什么fun2()中a还是初始0,不是9呢,局部静态变量也存储在全局区的呀??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
yisikaipu
2012-12-10
打赏
举报
回复
更正:漏了个字 static int a=9;//带初始化式的局部静态整型变量定义,初始化为9 static int a;// 不带初始化式的局部静态整型变量定义,初始化为0
yisikaipu
2012-12-10
打赏
举报
回复
引用 楼主 stone2317 的回复:
局部静态变量也存储在全局区的呀??
局部静态和全局变量都存储在一个区
引用 楼主 stone2317 的回复:
结果为什么fun2()中a还是初始0,不是9呢,
这是两个局部静态变量,各是各,不干涉 static int a=9;//带初始化的局部静态整型变量定义,初始化为9 static int a;// 不带初始化的局部静态整型变量定义,初始化为0
图灵狗
2012-12-10
打赏
举报
回复
原因是static变量只能在函数内部访问,也就是说fun1和fun2中的a其实是分配在不同的地址,对编译器来讲,其名称实际上是不一样的,你可以理解为一个是fun1_a,一个是fun2_a这样。
赵4老师
2012-12-10
打赏
举报
回复
VC调试时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。 对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。 (Turbo C或Borland C用Turbo Debugger调试,Linux或Unix下用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。) 提醒: “学习用汇编语言写程序” 和 “VC调试(TC或BC用TD调试)时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。 (Linux或Unix下可以在用GDB调试时,看每句C对应的汇编并单步执行观察相应内存和寄存器变化。)” 不是一回事! 不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实! 有人说一套做一套,你相信他说的还是相信他做的? 其实严格来说这个世界上古往今来所有人都是说一套做一套,不是吗? 不要写连自己也预测不了结果的代码!
最全的C和C++语言笔试面试题汇总
最全的C和C++语言笔试面试题汇总,我大四时候找工作时候他帮上了很多忙,里面的题目经常考到。希望对大家有帮助。
最全的C和C++语言笔试面试题汇总(pdf)
最全的C和C++语言笔试面试题汇总,pdf版
静态
局部
变量
的
同名
问题
3)下次调用函数时,函数中静态
局部
变量
的值时上次调用结束时的数值。2)不同函数中的静态
局部
变量
发生
同名
时,互不影响;1)没有初始化的时候,静态
局部
变量
默认为0;两个函数中的静态
局部
变量
同名
时,会发生什么。
static
变量
与全局、
局部
变量
的区别
java之
static
变量
与全局、
局部
变量
的区别
static
变量
与全局、
局部
变量
的区别 全局
变量
(外部
变量
)的说明之前再冠以
static
就构成了静态的全局
变量
。全局
变量
本身就是静态存储方式,静态全局
变量
当然也是静态存储方式。这两者在存储方式上并无不同。这两者的区别虽在于非静态全局
变量
的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局
变量
在各个源文件
局部
变量
与全局
变量
同名
时如何在
局部
变量
的作用范围内访问全局
变量
?
怎么做:当
局部
变量
与全局
变量
同名
时在
局部
变量
的作用域内,可以通过关键字this来引用成员
变量
。 特别注意:关键字this代表的是一个对象,只能用在非静态中,不能用在静态中,因为在静态中this可能是类名也可能是对象,因此在编译时会报错,如果需要,可以通过对象去访问成员
变量
代码说明: public class Test { int x=1;
static
void show() { int x=2; System.out.println("
局部
变量
:"+x); //System.ou
C++ 语言
65,176
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章