概述
全局变量
◆ 定义在函数外面的变量是全局变量
◆ 全局变量具有全局的生存期和作用域
★ 它们与任何函数都无关
★ 在任何函数内部都可以使用它们
【例1】
#include<stdio.h>
int f(void);
int gAll = 12;
int main(int agrc, const char* argv[])
{
printf("in main gAll = %dn", gAll);
f();
printf("in main gAll = %dn", gAll);
return 0;
}
int f(void)
{
printf("in f gAll = %dn", gAll);
gAll += 2;
printf("in f gAll = %dn", gAll);
return gAll;
}
这说明,gAll在f()和main()里面是一样的变量,这就是全局变量,不论函数在不在,它一直在那里。
全局变量初始化
◆ 没有做初始化的全局变量会得到0值
★ 指针会得到NULL值
◆ 只能用编译时刻已知的值来初始化全局变量
◆ 它们的初始化发生在main函数之前
【例2】
#include<stdio.h>
int f(void);
int gAll; //在本案例中,全局变量gAll没有做初始化
int main(int agrc, const char* argv[])
{
printf("in main gAll = %dn", gAll);
f();
printf("in main gAll = %dn", gAll);
return 0;
}
int f(void)
{
printf("in f gAll = %dn", gAll);
gAll += 2;
printf("in f gAll = %dn", gAll);
return gAll;
}
本案例的运行结果如下图所示:
【例3】
#include<stdio.h>
int f(void);
int gAll=f(); //在本案例中,全局变量gAll没有被赋予编译时刻已知的值
int main(int agrc, const char* argv[])
{
printf("in main gAll = %dn", gAll);
f();
printf("in main gAll = %dn", gAll);
return 0;
}
int f(void)
{
printf("in f gAll = %dn", gAll);
gAll += 2;
printf("in f gAll = %dn", gAll);
return gAll;
}
在本案例使用C语言进行编译时,就会报错:
【例4】
#include<stdio.h>
int f(void);
int gAll=12;
int g2 = gAll; //在本案例中,全局变量g2被赋予为另一个全局变量gAll的值
int main(int agrc, const char* argv[])
{
printf("in main gAll = %dn", gAll);
f();
printf("in main gAll = %dn", gAll);
return 0;
}
int f(void)
{
printf("in f gAll = %dn", gAll);
gAll += 2;
printf("in f gAll = %dn", gAll);
return gAll;
}
在本案例使用C语言进行编译时,就会报错:
被隐藏的全局变量
◆ 如果函数内部存在与全局变量同名的变量,则全局变量被隐藏
【例】
#include<stdio.h>
int f(void);
int gAll = 12;
int main(int agrc, const char* argv[])
{
printf("in main gAll = %dn", gAll);
f();
printf("in main gAll = %dn", gAll);
return 0;
}
int f(void)
{
int gAll = 1; //在本案例中,在更小的一个范围f()中定义了
printf("in f gAll = %dn", gAll); //一个与全局变量gAll同名的局部变量,则原
gAll += 2; //来的全局变量会被覆盖
printf("in f gAll = %dn", gAll);
return gAll;
}
最后
以上就是长情大叔为你收集整理的C语言基础之全局变量的全部内容,希望文章能够帮你解决C语言基础之全局变量所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复