5.2 作用域与存储期
作用域决定变量名在哪里可见。定义在函数或代码块中的变量是局部变量。
c
for (int i = 0; i < 5; i++) {
printf("%d\n", i);
}
// 这里不能再使用 i函数参数也是局部变量。调用函数时,实参的值会复制给形参,所以函数内部修改形参不会自动改变调用者的变量。
一个经典例子是 swap():它想在函数里交换两个变量的值,却会失败。
c
void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
}
int main(void) {
int x = 3, y = 8;
swap(x, y);
printf("%d %d\n", x, y);
return 0;
}运行结果:
text
3 8swap() 只交换了自己的局部副本 a 和 b,main 中的 x 和 y 完全没变。要真正交换调用者的变量,需要把变量的地址(指针)传进去,这会在第 7 章介绍。
全局变量定义在函数外,整个文件中的函数都能访问。它生命周期长,但会让数据变化来源更难追踪。初学阶段优先使用局部变量和函数参数。
static 局部变量会在函数调用结束后保留值,但作用域仍然限制在函数内。
正在加载概念检查...
正在加载本节练习...