External/global C 中的变量
External/global variable in C
我正在使用 C 编程现代方法一书学习 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") ;
}
}
因为 i
是 glocal 变量(两个函数通用)并且在第一次调用 print_one_row
后其值为 11
。使用此值 (11),print_all_rows
中的 for
循环的第二次迭代退出并且不再有 print_one_row
.
的调用
在 print_all_rows
中,就在第一次调用 print_one_row
之前,i
的值为 1。
然后调用print_one_row
。当该函数 returns、i
的值为 11 时。然后评估 print_all_rows
中的循环增量,将 i
从 11 增加到 12,然后评估条件为假,则 print_all_rows
returns.
我正在使用 C 编程现代方法一书学习 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") ;
}
}
因为 i
是 glocal 变量(两个函数通用)并且在第一次调用 print_one_row
后其值为 11
。使用此值 (11),print_all_rows
中的 for
循环的第二次迭代退出并且不再有 print_one_row
.
在 print_all_rows
中,就在第一次调用 print_one_row
之前,i
的值为 1。
然后调用print_one_row
。当该函数 returns、i
的值为 11 时。然后评估 print_all_rows
中的循环增量,将 i
从 11 增加到 12,然后评估条件为假,则 print_all_rows
returns.