我正在学习C语言中的全局变量,这本书是《C编程现代方法》.

下面是书中的一个例子,为什么对多个函数使用相同的全局变量是个坏主意.

假设我先调用函数print_one_row,然后调用函数print_all_rows.

程序进入函数print_all_rows,将i设置为1,调用函数print_one_row,然后调用函数increments 101 to 12 instead of 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.

C++相关问答推荐

为什么已经设置的值在C中被重置为for循环条件中的新值?

字符数组,字符指针,在一种情况下工作,但在另一种情况下不工作?

来自stdarg.h的c中的va_args无法正常工作<>

如何将已分配的数组(运行时已知的大小)放入 struct 中?

在C中使用JMP_buf数组进行线程化(在xv6中测试)

堆栈帧和值指针

如何在C中从函数返回指向数组的指针?

如何在C中通过套接字自定义数据类型读取原始变量?

正确的TCP/IP数据包 struct

用gcc-msse 2编译的C程序包含AVX 1指令

用C++实现余弦函数

正数之和是负数

Tic-tac-toe:从文件加载存储

覆盖读取函数,但当文件描述符为3或4时,我有问题

程序如何解释变量中的值

c如何传递对 struct 数组的引用,而不是设置 struct 的副本

If语句默认为true

使用邻接表创建图

在 C/C++ 中原子按位与字节的最佳方法?

Zig 中 C 的system函数的惯用替代方案