没看懂fn()和i之间的关系 还有怎么计算的 = =

麻烦大佬告知一下  谢谢

https://img1.mukewang.com/5acf05a90001931305000434.jpg

慕斯7080739
浏览 1164回答 2
2回答

onemoo

第 11 行的 i 跟 fn 中的 x 没有直接关系,i 只是控制 for 循环次数的。i 让 for 循环体执行 5 次,于是调用 fn 函数五次。多次调用 fn 是为了演示“函数中的 static 变量可以在多次函数调用中保留值”这一点。你应该能看到这个程序首先打印了 5 次 fn 中第 6 行输出,分别是 x=2、x=4、x=8、x=16、x=32,没错吧?如果 fn 中第 4 行没有 static,那么 x 只是这个函数的本地变量。这样函数每次被调用时 x 的值都被初始化为 1,那么第 6 行的 printf 每次都会只打印 x=2。但这里 x 是 static 的,像这样在函数中被 static 修饰的变量仅在函数第一次调用时会被初始化(这里是 1),但在其后的函数调用中并不会被重新初始化,而是会保留之前的值。 所以第二次调用 fn 时这个 x 就是 2,再经过 x*=2 就变成了 4,依此类推...那么第 16 行的那个 extern int x 呢?这个 x 和之前 fn 中的 x 没有任何关系,只是名字相同而已。 fn 中的 x 仅在 fn 函数中可用,在函数外根本“不可见”。16 行这个 x 有 extern 修饰,这表明这里只是个 x 的声明。 如果这里仅仅写 int x 的话,这个 x 默认会成为定义,也就是实际表示一个“单独”的值(这种说法并不规范,但应该好懂)。那么这个 x 只是声明,编译器知道它代表的值会定义在别的地方。你这个代码中在 main 中可见的 x 除了 16 行这个以外,还有 20 行的那个。像 20 行这样定义在任何函数外的变量是“全局变量”,在本代码文件中都可见。那么编译器就认为 16 行的 x 是代表 20 行的这个 x 了(因为同名)。而 20 行的 x 是定义,并且值为 100。所以 17 行的 printf 最后会打印 x=100
打开App,查看更多内容
随时随地看视频慕课网APP