c语言全局变量和全局静态变量 静态变量和全局变量的区别( 二 )


4、变量分配位置:全局变量分配在数据段上,而局部变量分配在栈上 。
#
void func1(void);
void (void);
void (void);
void (void);
void (void);
int g_a = 1;
int main(void)
{
//a = 4;// 编译报错,未定义
g_a = 5;// 可以,因为g_a是全局变量,所以到处都可以用
func1();// i = 2
func1();// i = 2
func1();// i = 2
();// a = 2
();// a = 3
();// a = 4
();// a = 4;
();// a = 7;
();// a = 10;
();// g_a = 4;
();// g_a = 7;
();// g_a = 10;
();
();
();
// 因为i是定义在函数func中的局部变量,所以i的作用域为代码块作用域,所以i只在func1
// 函数内部有效,在func1外面是不能访问i的 。所以这里i会无定义 。
//i = 5;// error: ‘i’(first use in this )
0;
}
void func1(void)
{
int i = 1;// 普通的局部变量,auto可以省略的
//auto int i = 0;// 自动局部变量,其实就是普通局部变量
i++;
("i = %d.", i);
}
void (void)
{
int a = 1;// 静态的局部变量
a++;
("a = %d.", a);
}
void (void)
{
int a = 1;// 静态的局部变量
a += 3;
("a = %d.", a);
}
void (void)
{
g_a += 3;
("g_a = %d.", g_a);
}
void (void)
{
int a = 1;// 静态的局部变量
a += 3;
("a = %d.", a);
}
#
int g_i = 13;

c语言全局变量和全局静态变量  静态变量和全局变量的区别

文章插图
// 实验结论:
// 首先,main函数是一个程序运行最开始执行的东西,所有的其他函数都只能在main函数中被
// 直接或者间接的调用才能被执行 。main函数的执行其实就是整个程序的生命周期,main函数
// 一返回,整个程序就结束了 。
// 其次,全局变量的定义和初始化是在main函数运行之前发生的 。
int main(void)
{
("g_i = %d.", g_i);
0;
}
#
void (void);
int g_a;// 声明了一个int变量g_a
// int g_b;
void (void)
{
("I am func in b.c.");
}
int main(void)
{
("I am main in a.c.");
("I am main in a.c, g_a = %d.", g_a);
("I am main in a.c, g_a = %d.", g_b);
//();// 直接调用
();// 间接调用
0;
}
#
void (void);
int g_a = 12;
int g_b = 111;
void (void)
{
g_a = 24;
("I am inof a.c, g_a = %d.", g_a);
();
}
/*
// 定义错误
// C语言中,定义函数都必须在外面,不能在一个函数里面定义别的函数
// 所以没有局部函数,只有全局函数 。
void func1(void)
{
int a;
void func2()
{
int b;
}
}
*/
【c语言全局变量和全局静态变量静态变量和全局变量的区别】最后两个分别为a.c b.c 文件目录为