先让大家看看博主今天遇到的一个小程序:
#include<stdio.h>
int a,b;
void fun();
int main(void)
{
int a = 50;
fun();
printf("2:%d,%d,%p,%p\n",a,b,&a,&b);
a+=a;
b+=b;
printf("3:%d,%d,%p,%p\n",a,b,&a,&b);
return 0;
}
void fun()
{
a = 100;
b = 200;
printf("1:%d,%d,%p,%p\n",a,b,&a,&b);
}
各位能否看得出各个变量a和变量b输出的值?不过精通c语言基础的程序员肯定知道吧,哈哈!
下面是前面程序代码在vc++6.0上运行的结果截图:
我们来分析一下前面的代码,首先在所有函数外面声明两个变量a和b,他们是具有外连接的、静态的、文件作用域的变量,也就是我们所知道的全局变量。在main()函数里,定义了一个变量a,它是具有空连接的、自动的、代码块作用域的变量,作用范围仅限于main()函数。这里我们可以通过变量的地址来区分这三个变量。
程序运行时,从main()进入,调用fun()函数时,变量a和变量b分别被赋值为100和200,这里的a和b用的都是全局变量a和b,即在所有函数外面定义的变量,结束函数的调用之后,输出的a值却是main()函数里定义的局部变量a。
再让我们看看下面程序例子:
#include<stdio.h>
int a;
void fun1();
void fun();
int main(void)
{
int a = 50;
fun();
printf("2:%d,%p\n",a,&a);
a+=a;
printf("3:%d,%p\n",a,&a);
return 0;
}
void fun()
{
a = 100;
fun1();
printf("1:%d,%p\n",a,&a);
}
void fun1()
{
a = 400;
printf("%d,%p\n",a,&a);
}
哈哈,这次大家是不是都猜到各个变量a值的输出结果了?是的,mian()函数调用一个fun()函数时用的变量a就是在所有函数外定义的变量a,除非函数自己本身也定义一个变量a。
下面程序代码和运行结果是验证:
#include<stdio.h>
int a;
void fun1();
void fun();
int main(void)
{
int a = 50;
fun();
printf("2:%d,%p\n",a,&a);
a+=a;
printf("3:%d,%p\n",a,&a);
return 0;
}
void fun()
{
int a = 100;
fun1();
printf("1:%d,%p\n",a,&a);
}
void fun1()
{
a = 400;
printf("%d,%p\n",a,&a);
}
运行结果:
博主还发现,变量的地址也是好东西呢,可以帮助我们快速区分不同的变量。在这里再次谢谢大家的阅览!如果有错误也希望各位读者指正,博主会尽快改正的。