问题遇到的现象和发生背景
#include <stdio.h>
int i,j;
void charge(int i)
{
i=2;
j=3;
}
main()
{
i=5;
j=6;
charge(i);
charge(j);
printf("i=%d\tj=%d\n",i,j);
}
为什么这个运行结果是i=5,j=3啊?是主函数里面的i的值把void里面的i值覆盖了吗?两者不是相互独立的吗??还有这个函数调用的逻辑可以给解释下吗?我不理解
希望可以有人可以帮忙解答谢谢
#include <stdio.h>
int i,j;
void charge(int i)
{
i=2;
j=3;
}
main()
{
i=5;
j=6;
charge(i);
charge(j);
printf("i=%d\tj=%d\n",i,j);
}
为什么这个运行结果是i=5,j=3啊?是主函数里面的i的值把void里面的i值覆盖了吗?两者不是相互独立的吗??还有这个函数调用的逻辑可以给解释下吗?我不理解
希望可以有人可以帮忙解答谢谢
变量的作用域问题。
代码第2行,声明两个全局变量,他们的作用域是所有源码都可见。
第3行声明里一个函数,它的参数有个同名的变量,并且类型也相同,是 int i,作为函数的参数,函数体内部当做局部变量来使用。
由于全局变量与局部变量的作用域重合了,那么,编译器会优先使用局部变量。
换句话说,代码第5行中的i变量,是函数的参数int i,而不是全局变量的 int i,j 中的i变量。
代码第6行,因为函数参数列表和函数体中,并没有声明同名为j的变量,所以,编译器会选用全局变量j来使用。
所以,可以得出一个结论,