一、问题背景
最近在研究C语言中的全局变量,发现不像Python语言那样——在子函数中给全局变量赋值需要用到global关键字。
C语言中,在主函数、自定义函数中,可以直接引用全局变量,并且不用加任何关键字就可以对其修改。
然而,在某次执行代码过程中,我发现竟然改不了。
代码如下:
#include <stdio.h>
static int a = 1;
static int b = 2;
int add(int x, int y)
{
x = 9;
y = 10;
printf("%d\n", x+y);
return x+y;
}
int main()
{
add(a, b);
a = 3;
b = 4;
add(a, b);
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
输出结果如下:
二、解决办法
后来,我发现原来是因为我将a和b传给形参,在自定义函数中通过形参来修改全局变量了(这是不行的)。
改成下面的形式就好了。
#include <stdio.h>
static int a = 1;
static int b = 2;
int add(int x, int y)
{
a = 9;
b = 10;
printf("%d\n", x+y);
return x+y;
}
int main()
{
add(a, b);
a = 3;
b = 4;
add(a, b);
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
输出结果是