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的地址看看。
变量分配地址,之后只是取出变量的值吧!
我的理解。
[解决办法]