c语言goto标签作用域

#include<stdio.h>intmain(){inty=0;gotoa;{inty=3;a:printf("now%d\n",y);}}为什么输出一个-85899... #include <stdio.h>
int main(){

int y = 0;
goto a;
{
int y = 3;
a :
printf("now%d\n",y);
}
}
为什么输出一个-858993460的数。
展开
 我来答
智飞沉40
2014-11-19
知道答主
回答量:6
采纳率:0%
帮助的人:2.8万
展开全部
这个问题很有意思。说说我的猜测吧,不一定对。
{
int y = 3;

a:
...

}
这是一个类似一个小函数的作用域,int y = 3;在编译的时候会被拆分成 int y; y = 3;两条语句。
int y;这是定义一个局部变量,在函数压栈的时候就给他分配了地址,这个作用域使用y的时候会从这个地址取值,而不是上边定义的那个int y=0; 而用goto语句跳到 标签a的时候,就会把y=3这条语句给跳过了,所以此时y的值是一个随机数。

以上观点纯粹为个人猜测,如有不对望指正
伦悦宜yS
推荐于2016-07-07 · TA获得超过674个赞
知道小有建树答主
回答量:769
采纳率:100%
帮助的人:373万
展开全部
这程序语法不对,不可能运行!

因为中间显然是一个分结构,使其mian函数的局部变量y与分结构的局部变量y没有任何关系,在分结构中的y是输出语句printf的输出对象;而如果执行goto a;语句,势必跳过分结构的局部变量y的定义,故输出对象就成未定义。
更多追问追答
追问
看到书上goto语句标签作用域对函数中任何地方代码可见不理解,写着试试的,话说不可见是什么意思,谢谢
我编译通过并运行了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式