关于C语言作用域的两个例子
第一个例子:
1. main_b = 3
main_a = 2
foo_a = 0
foo_b = 4
2. main_b = 3
第二个例子:
moo : x = 5, *y = 6, y = 1073742056, z = 3
main: x = 21, y = 6, z = 4
#include <stdio.h> int a=0; // 全局变量 void foo(void); int main(void) { int a=2; // main函数内的局部变量 int b=3; // main函数内的局部变量 printf("1. main_b = %d\n", b); printf("main_a = %d\n", a); foo(); printf("2. main_b = %d\n", b); } void foo(void){ int b=4; // foo函数内的局部变量 printf("foo_a = %d\n", a); printf("foo_b = %d\n", b); }输出结果:
1. main_b = 3
main_a = 2
foo_a = 0
foo_b = 4
2. main_b = 3
第二个例子:
#include <stdio.h> int x = 2; int y = 3; int z = 4; void moo(int x, int *y){ int z; x = x+3; *y = *y+3; z = z+3; /** * 这里的 z 是局部变量。 * 注意:z 没有被手动初始化。 * 不过从后面的输出结果可以看出,z 被编译器自动初始化为 0。 * 一般情况下,编译器会有一个警告,告诉你 z 没有被初始化 **/ printf("moo : x = %1d, *y = %1d, y = %1d, z = %1d\n", x,*y,y,z); } int main(void){ moo(x, &y); printf("main: x = %1d1, y = %1d, z = %1d\n", x,y,z); }输出结果:
moo : x = 5, *y = 6, y = 1073742056, z = 3
main: x = 21, y = 6, z = 4