我无法弄清楚程序是如何工作的,所以我在计算机上运行它并得到输出:
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++;
}
}
nMax
实际上根本没有传递到sumInts
- 这就是所谓的全局变量。全局变量是在任何函数外部定义的变量,可以在任何函数内部使用,并在函数调用之间保留其值。由于nMax
是全局的,因此在 main 函数中设置它会更改其sumInts
的值,并导致程序如您所见地运行。不过,这通常被认为是有些糟糕的风格,可能应该避免以防止错误。
没有参数传递。
此外,while
和 for
循环共享相同的全局变量。
for (n=1;n<nMax;n++)
是无用的while
因为循环在 1 次调用 sumInts
后使条件为假n<nMax
(并且结果是正确的(。
所以这里有很多冗余代码,并且还使用全局变量(特别是像n
这样的名称(很快就会给你带来麻烦。