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;icout在您的程序中,
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
中有一个逗号,那不应该是分号吗?