C语言 全局变量与静态本地变量

全局变量

定义

  • 全局变量:定义在函数外部的变量
#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;
}

扩展知识:源代码编译为可执行文件过程

预处理
编译
汇编
链接
.c 源文件
.i 替换头文件后的源文件
.s 汇编语言
.o 二进制机器语言
.exe 可执行文件

静态本地变量

定义

  • 静态本地变量: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;
}

生存期与作用域

  • 全局变量:全局生存期、作用域
  • 局部变量:局部生存期、作用域
  • 静态本地变量:全局生存期、局部作用域

需要返回指针的函数

  • 不要返回本地变量地址
  • 可以返回全局变量地址、静态本地变量地址、动态内存地址
  • 最好返回传入的指针
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值