全局变量
定义
- 全局变量:定义在函数外部的变量
#include<stdio.h>
int gA=10; //全局变量
void f()
{
printf("f %d",gA); //f 10
}
int main()
{
printf("main %d\n",gA);//main 10
f();
return 0;
}
初始化
- 没有初始化的全局变量自动补“0”或“NULL”
- 全局变量必须使用 编译时刻 已经确定的值初始化时
#include<stdio.h>
int gA; //全局变量
int *p; //全局变量
int a=10;
//int b=a; //[Error] initializer element is not constant
void f()
{
printf("f gA=%d\n",gA); //f gA=0
printf("f p=%p\n",p); //f p=0000000000000000
}
int main()
{
printf("main gA=%d\n",gA); //main gA=0
printf("main p=%p\n",p); //main p=0000000000000000
f();
return 0;
}
扩展知识:源代码编译为可执行文件过程
静态本地变量
定义
- 静态本地变量:static 本地变量定义
特点
- 静态本地变量只在第一次进入函数时初始化,以后再次进入时保持上次离开值
- 静态本地变量与全局变量的存储位置相同
#include<stdio.h>
int gA;
void f()
{
static int a=0;
a++;
printf("第%d次\n",a);
printf("&gA=\t%p\n",&gA); //&gA= 0000000000407A20
printf("&a=\t%p\n",&a); //&a= 0000000000407030
}
int main()
{
int b;
f(); //第 1次
printf("&b=\t%p\n",&b); //&b= 000000000062FE1C
f(); //第 2次
f(); //第 3次
return 0;
}
生存期与作用域
- 全局变量:全局生存期、作用域
- 局部变量:局部生存期、作用域
- 静态本地变量:全局生存期、局部作用域
需要返回指针的函数
- 不要返回本地变量地址
- 可以返回全局变量地址、静态本地变量地址、动态内存地址
- 最好返回传入的指针