我正在学习C语言中的全局变量。
下面是书中给出的一个例子,为什么对多个函数使用相同的全局变量是坏主意。我不明白为什么函数print_all_rows
只执行函数print_one_row
一次。
假设我先调用函数print_one_row
,然后调用函数print_all_rows
。在程序开始时,i
被编译器默认设置为0。程序执行完print_one_row
函数后,i
的值为11。
程序进入函数print_all_rows
,设置i
为1,调用函数print_one_row
,然后将i
递增为12而不是2.
如果我将i
的值更改为1,为什么将i
增加到12而不是2 ?
int i;
void print_one_row(void)
{
for (i = 1; i <= 10; i++)
printf ("*" ) ;
}
void print_all_rows(void) {
for (i = 1; i <= 10; i++) {
print_one_row();
printf ("n") ;
}
}
在print_all_rows
中,就在第一次调用print_one_row
之前,i
的值为1。
则调用print_one_row
。当该函数返回时,i
的值为11。然后计算print_all_rows
中的循环增量,使i
从11增加到12,然后计算条件为假,然后返回print_all_rows
。
因为i
是glocal变量(对于两个函数都是通用的),并且在第一次调用print_one_row
之后它的值是11
。有了这个值(11),print_all_rows
中的for
循环的第二次迭代退出,不再调用print_one_row
。