C++ 这个C++;代码返回0,0,3
代码如下:C++ 这个C++;代码返回0,0,3,c++,C++,代码如下: #include<iostream> using namespace std; int a, b; int f(int c) { int n = 1; for (int i = 0; i < c, i++;) { int a = n + i; } return a; } void
#include<iostream>
using namespace std;
int a, b;
int f(int c)
{
int n = 1;
for (int i = 0; i < c, i++;)
{
int a = n + i;
}
return a;
}
void main()
{
int i = 3;
int b = f(i);
cout << a << b << i;
}
#包括
使用名称空间std;
INTA,b;
INTF(INTC)
{
int n=1;
对于(int i=0;i cout在您的程序中,f()
总是返回0
。for
循环中的a
与全局变量是不同的a
(它“阴影”了它)。因此,main()中的局部变量b
(它阴影了全局b
)通过调用程序中的f()
将初始化为0
,f()
始终返回0
。for
循环中的a
与全局变量不同(它“隐藏”了它)。因此,局部变量b
在main()
(通过调用f()将全局b
)初始化为0
因为在函数f的for循环中,a是一个局部变量。它的scople只在for循环中有效。所以返回值是全局的a;所以返回0;因为在函数f的for循环中,a是一个局部变量。它的scople只在for循环中有效。所以返回值是全局的a;所以返回0;其他人已经指出了这一点如果在循环中写入一个局部a
,但返回全局a
,那么即使修复了它,循环实际上也不会进入它的主体,因为i
的计算结果为0
,这将被解释为false
(请参阅)
您需要将整个循环修复为:
for (int i = 0; i < c; i++)
{
a = n + i;
}
for(int i=0;i
虽然其他人已经指出,您在循环中向本地a
写入代码,但返回全局a
,但即使您修复了它,您的循环实际上也不会进入它的主体,这也毫无价值,因为i
的计算结果为0
,这将被解释为false
。(见附件。)
您需要将整个循环修复为:
for (int i = 0; i < c; i++)
{
a = n + i;
}
for(int i=0;i
更好地命名变量,您就会发现。您有两个a
声明,因此对f()
的调用将返回全局声明。-Wall
也揭示了错误:怪异。cpp:9:13:警告:未使用的变量“a”[-Wunused variable]
在“f”的底部有两个“a”,一个是全局的,一个是局部的。它返回全局的“a”,即0。你在f
中的循环有一个逗号,那不应该是分号吗?请更好地命名你的变量,你会发现。你有两个a
的声明,所以你调用f()
返回全局变量。-Wall
也揭示了错误:怪异。cpp:9:13:警告:未使用的变量“a”[-Wunused variable]
在“f”的底部有两个“a”,一个是全局变量,一个是局部变量。它返回的全局“a”是0。你的循环在f
中有一个逗号,那不应该是分号吗?