变量的属性(生命周期、作用域、默认值、内存区域、链接属性)

一.全局变量:定义在函数外部

生命周期:从程序运行开始创建,程序退出销毁

作用域:从定义该变量开始一直到文件的结束

默认值:0

内存区域:全局(静态)变量区

链接属性:外部(可以在其他文件中引用)

例:在max.cpp中定义全局变量int a=10;

       若在min.cpp中调用a,使用extern int a就能声明全局变量a,然后就可以使用a

二.静态全局变量:定义在函数外部

 与全局变量区别:定义时加上 static

生命周期:从程序运行开始创建,程序退出销毁

作用域:从定义该变量开始一直到文件的结束

默认值:0

内存区域:全局(静态)变量区

链接属性:内部(只可以在本文件中使用,不可以在其他文件中引用)

例:在max.cpp中定义静态全局变量static int a=10;

       若在min.cpp中调用a,即使使用extern int a声明,仍不可使用a

三.局部变量:定义在函数内部的变量,包括函数形参

生命周期:进入函数时创建,函数退出时销毁

作用域:本函数内部有效

默认值:随机值

内存区域:栈

链接属性:无

例:

void Fun()
{
	 int a = 0;
	a++;
	printf("%d\n",a);
}

int main()
{
	for(int i=0;i<10;i++)
	{
		Fun();
	}
	return 0;
}

结果:

四.静态局部变量:定义在函数内部的变量,包括函数形参

与局部变量区别:定义时加上 static

生命周期:进入函数时创建,程序结束时销毁

 作用域:本函数内部(虽有静态二字,但由于是局部变量,在非定义函数中无法使用)

内存区域:全局(静态)变量区

默认值:0

链接属性:无

例:           

void Fun()
{
	 static int a = 0;//第一次进入才执行
	a++;
	printf("%d\n",a);
}

int main()
{
	for(int i=0;i<10;i++)
	{
		Fun();
	}
	return 0;
}

结果:


五.动态内存

生命周期:调用动态内存创建函数才创建,调用动态内存释放函数时销毁

作用域:创建成功后没有进行释放时只要获得动态内存的首地址都可使用

默认值:无

内存区域:堆

链接属性:无

例:

#include <stdio.h>
#include<stdlib.h>

int * Fun()
{
	int *p=(int *)calloc(20,sizeof(int));
	return p;
}


int main()
{
	int *p=Fun();
	p[0]=1;
	for(int i=0;i<20;i++)
	{
		printf("%3d",p[i]);
	}
	free(p);
	return 0;
}

结果:


六.函数:外部函数,内部函数(加上static)

内存区域:代码段

链接属性:有static 内部

                 无static 外部

例:在max.h中存放Max函数的声明

     int Max(int a,int b);

     在max.cpp存放Max函数的实现和Min函数的实现

    在主函数页添加max.h头文件便可使用Max函数,若想使用Min函数必须用extern 声明Min函数 :extern int Min(int ,int );

    若在Min函数前添加static即使使用extern 声明Min函数也无法使用Min函数

例题:

#include <stdio.h>
#include <stdlib.h>
int Max(int a,int b)
{
	return a>b?a:b;
}
int g_a=10;
int main()
{
	int a=10;              
	static int b=20;
	int *p1=&a;
	int *p2=&b;
	int *p3=(int *)malloc(20);
	int *p4=&g_a;
	int (*p5)(int,int)=Max;
   return 0;
}

&p1,p1,&p2,p2,&p3,p3,&p4,p4,&p5,p5分别在那个内存区域?

&p1  栈         p1=&p2     栈

&p2 栈          p2=&b       全局(静态)数据区

&p3 栈          p3              堆

&p4 栈          p4=&g_a   全局(静态)数据区

&p5 栈          p5              代码段


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值