如何在没有参数的情况下将值传递给函数

问题描述 投票:1回答:2

我无法弄清楚程序是如何工作的,所以我在计算机上运行它并获得输出:

the sum of 5 to 4 is 10

我不明白在函数调用期间如何将nMax传递给sumInts函数(空参数),但n的值取自全局变量。这是n增加到5并且总和为10的唯一方式。

提前致谢

#include <stdio.h>
#include <stdlib.h>

void sumInts();

int n=0;
int nMax = 0;
int sum = 0;

int main(int argc, char* argv[]) {
    if (argc<2) {
        printf("Usage: ex2 7 \n");
        exit(-1);
    }
    nMax = atoi(argv[1]);

    for (n=1;n<nMax;n++) {
        sumInts();
        printf("The sum from %d to %d is %d \n" , n , nMax, sum);
    }

    return 0;
}

void sumInts() {
    while (n<= nMax) {
    sum = sum+n;
    n++;
    }
}
c global-variables
2个回答
2
投票

nMax实际上并没有传递到sumInts - 这就是所谓的全局变量。全局变量是在任何函数外部定义的变量,可以在任何函数内部使用,并在函数调用之间保留其值。由于nMax是全局的,因此在main函数中设置它会在sumInts中更改其值,并使程序按您所见的方式运行。一般来说,这被认为是一种不好的风格,并且应该避免以防止错误。


0
投票

没有参数传递。

此外,whilefor循环共享相同的全局变量。

for (n=1;n<nMax;n++)是无用的,因为while循环使n<nMax条件在调用sumInts之后为假(并且结果是正确的)。

所以这里有很多冗余代码,并且还使用全局变量(特别是像n这样的名字)会让你很快陷入困境。

© www.soinside.com 2019 - 2024. All rights reserved.