重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
C语言不支持这个,只能在函数外面声明,变通的方式是,声明指针指到在外面声明的全局变量。
创新互联公司是一家专注于网站制作、做网站与策划设计,宜春网站建设哪家好?创新互联公司做网站,专注于网站建设10余年,网设计领域的专业建站公司;建站业务涵盖:宜春等地区。宜春做网站价格咨询:18982081108
在函数内定义的变量是局部变量,而在函数外定义的变量叫做外部变量,外部变量是全局变量。全局变量可以为本文件中其他函数所共用它的有效范围从定义变量的位置开始到本源文件结束。
建立全局变量的作用是增加了函数间数据联系的渠道。
他们的关系自己看图,对照着图看就懂了。
特别是同样是y,main里面的用的y就是main里面那个,p里面用的y就是p里面那个,都叫y,不是同一个变量。
main是程序的入口,任何程序都是从main开始执行。
另外,你这程序没答案,因为作为初始数据的全局变量int x就没赋值,其值是不定值
1、全局变量也称为外部变量,它是在函数外部定义的变量。
它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。在函数中使用全局变量,一般应作全局变量说明。
只有在函数内经过说明的全局变量才能使用。全局变量的说明符为extern。
但在一个函数之前定义的全局变量,在该函数内使用可不再加以说明。外部变量是在函数外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的
结尾。在此作用域内,全局变量可为各个函数所引用。编译时将外部变量分配在静态存储区。
有时需要在其他文件中使用extern来声明外部变量,以扩展外部变量的作用域。
也可用static声明外部变量,使该变量不能被其他文件引用。有时候他们是一样的,只有稍微一点的区别而已,不用太过于区分的。
2、定义及引用方法:
#ifdef xxx_GLOBALS
#define xxx_EXT#else#define xxx_EXT extern
#endif 上面位于.H 文件中,每个全局变量都加上了xxx_EXT的前缀,xxx代表模块的名字。该模块的.C文件中有以下定义:#define xxx_GLOBALS
当编译器处理.C文件时,它强制xxx_EXT(在相应.H文件中可以找到)为空,(因为xxx_GLOBALS已经定义)。所以编译器给每个全局变量分配内存空间,而当编译器处理其他.C文件时,xxx_GLOBAL没有定义,xxx_EXT被定义为extern,这样用户就可以调用外部全局变量。进阶:在abc.H:#ifdef abc_GLOBALS
#define abc_EXT#else
#define abc_EXT extern#endif
abc_EXT unsigned int Ctr;
同时,abc.H有中以下定义:#define abc_GLOBALS
当编译器处理abc.C时,它使得头文件变成如下所示,因为abc_EXT被设置为空。unsigned int Ctr;
这样编译器就会将这些全局变量分配在内存中。当编译器处理其他.C文件时,头文件变成了如下的样子,因为abc_GLOBAL没有定义,所以abc_EXT被定义为extern。extern unsigned int Ctr;
在这种情况下,不产生内存分配,而任何 .C文件都可以使用这些变量。这样的就只需在 .H 文件中定义一次就可以了。
1、记住一条就够了:在函数之外定义的变量就是全局变量。用static修饰的变量可以是全局的,也可以是局部的,所以说“用static修饰的变量是全局变量”是错误的。用static修饰的变量的生命周期与全局变量一样,但可见性仍分全局和局部。
2、全局变量在整个c文件中都能使用,而局部变量在其作用域内才能使用,举个例子:
int f = 7;// 这个是全局变量
int myadd(int a, int b)
{
int c = a + b;// c是局部变量,只能在myadd中使用
return c;
}
int main(void)
{
printf("%d\n", c);// 因为c是myadd中定义的局部变量,这里会报错。
printf("%d\n", f);// f是全局变量,这句是正确的。
}
定义在函数体外部的变量叫全局变量,
要定义全局变量你只要把变量定义在
所有函数外部即可。
要注意的是,全局变量只对它定义位
置以下的函数可见。
#includestdio.h
void f1();
void f2();
int y=100;
int main()
{
printf("%d\n\n",y);
//printf("%d\n",x);这不可以读x,x对main()不可见
f1();
f2();
return 0;
}
int x;
void f1()
{
x=200;
}
void f2()
{
printf("%d\n",x);
printf("%d\n",y);
}