读书人

goto语句有关问题

发布时间: 2012-03-31 13:13:26 作者: rapoo

goto语句问题
这段代码用goto语句为何不会出错
这问题很无聊,纯属研究,因为一直不懂原因

C/C++ code
#include <iostream>using namespace std;/*int main(){    int a=1;    int a=1;   //该语句会编译错误,因为定义了两次a    cout<<a<<endl;    return 0;}*/int main(){start:    int a=1;    cout<<a<<endl;    goto start;    //可通过编译}


[解决办法]
定义语句只在编译时生效,在目标代码里是不存在的。所以goto上去一点问题也不会有,因为根本就没有执行重复的定义。

要是使用解释执行,那里就会出错了。不过C/C++不是解释执行的。
[解决办法]
变量定义是编译的时候干的,你把int a;放在start:前或者start:后是完全一样的。只有一个a,不会因为你放在start:后面就循环出好几个a来。局部变量分配空间是函数一开始执行你写的任何语句之前干的。
[解决办法]
地址是一样的。你可以输出变量a的地址看看。
变量分配地址,之后只是取出变量的值吧!
我的理解。
[解决办法]
探讨

引用:

定义语句只在编译时生效,在目标代码里是不存在的。所以goto上去一点问题也不会有,因为根本就没有执行重复的定义。

要是使用解释执行,那里就会出错了。不过C/C++不是解释执行的。


那返回上去之后定义的a和原来的a的地址也是一样的吧?

读书人网 >C++

热点推荐