#include <stdio.h> int main(void) { int a = 3; int i = 0; for(i = 0; i < 3; i++) { if(i == 0){ int a=5; } printf("%d\n",a); } return 0; }
[quote=引用 7 楼 zyaiwx 的回复:] 必然是3个3. for(i = 0; i < 3; i++) { if(i == 0){ int a=5; } printf("%d\n",a); } 这里面a作为一个堆栈变量,每次遇到大括号就会释放。所以对printf来说是看不到a的。 其次,如果去掉大括号,是可以的。因为它和最前面定义的a不在一个作用域内。可能是你编译问题。 建议看看编译器查找变量名的方式。
必然是3个3. for(i = 0; i < 3; i++) { if(i == 0){ int a=5; } printf("%d\n",a); } 这里面a作为一个堆栈变量,每次遇到大括号就会释放。所以对printf来说是看不到a的。 其次,如果去掉大括号,是可以的。因为它和最前面定义的a不在一个作用域内。可能是你编译问题。 建议看看编译器查找变量名的方式。
至少现在的C/C++里。if里的a和printf用的a不是一个a。a被定义了一次(编译时)初始化了三次(运行时)。
70,020
社区成员
243,265
社区内容
加载中
试试用AI创作助手写篇文章吧