这段C++代码输出0,0,3,求解b=0的原因
为什么代码中的b输出是0?
咱们先把你的代码贴出来方便分析:
#include<iostream> using namespace std; int a, b; int f(int c) { int n = 1; for (int i = 0; i < c; i++ ) { // 注:你原代码里的`i < c, i++`是笔误,正确写法是分号分隔条件 int a = n + i; } return a; } void main() { int i = 3; int b = f(i); cout << a << b << i; }
这问题核心是变量作用域的优先级,咱们一步步拆解:
- 首先,全局变量
a和b默认初始化为0,这个你已经理解了。 - 看函数
f:- 循环内部定义的
int a = n + i;是个局部变量,它的作用域只局限在循环的大括号{}里,出了循环就会被销毁,和全局的a完全是两个独立的变量。 - 当执行
return a;时,函数f的作用域里没有有效的局部a(循环里的a已经失效),编译器就会往上找全局作用域的a,而全局a的值一直是0,所以f(i)最终返回的是0。
- 循环内部定义的
- 回到
main函数:- 你定义了局部变量
b,把f(i)的返回值(0)赋值给它,所以输出的b自然就是0。
- 你定义了局部变量
另外补充个小细节:你原代码里的for循环条件用了逗号,这是笔误,正确写法应该用分号分隔,但这个不影响咱们分析核心的作用域问题~
内容的提问来源于stack exchange,提问作者samh30
相关产品推荐
相关产品推荐

