函数、全局变量、局部变量和动态内存的特点归纳



 

生命周期

作用域

默认值

内存区域

链接属性

 

全局变量(定义在函数外部的变量)

 

普通全局变量

程序运行开始创建,程序退出才销毁

从定义变量处到本文件结尾都能使用

 

0

全局变量区

外部(其他文件也能用)

静态全局变量

程序运行开始创建,程序退出才销毁

从定义变量处到本文件结尾都能使用

 

0

全局变量区

内部(只能本文件使用)

 

局部变量

(定义在函数内部的变量,包括形参)

普通局部变量

进入函数创建,退出函数销毁

 函数内部或for循环内部等等

随机值

局部变量区

 

静态局部变量(不常用)

第一次执行该语句创建,程序结束才销毁

 函数内部或for循环内部等等

0

全局变量区

 

 

动态内存

调用malloc()创建,free()销毁

 

随机值

 

函数

普通函数(外部函数)

 

 

 

代码段

外部(外部文件引用)

静态函数(内部函数)

 

 

 

代码段

内部(内部文件引用)

        

 

 

 

内存块

代码段

全局变量区

 

(上图并无逻辑关联)

 

 

 

1.全局变量:定义在函数外部的变量,如: 

 

int g_a ; // 普通全局变量

static int g_sa; //静态全局变量

 

两者之间的区别在于链接属性(static修饰的是链接属性).

1_1:普通全局变量:可以被外部文件使用。当已经在同一个解决方案中的文件2中定义了普通全局变量(int g_a ;),么在文件1中可以通过(extern int g_a;)来引用它。

 

1_2:静态全局变量:只能被本文件使用。当在文件1中定义了静态全局变量(static int g_sa;)时,有在本文件中可以引用该变量,而在文件2中并不能通过(extern int g_sa;)来引用静态全局变量。

 

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

 

void Fun()

{

         int a = 0;// 普通局部变量

         ++a;

         printf("%d\n",a);

}

 

void Fun2 ()

{

         static int a = 0;// 静态局部变量

         ++a;

         printf("%d\n",a);

 

}

 

Int main()

{

For(int i=0;i<10;i++)

{

   Fun();

   Fun2();

}

}

 

2_1:普通局部变量:生命周期短,进入函数时创建、退出函数即销毁。作用域仅仅是在函数内部,存放在栈里,且初始值(未初始化)为随机值。在上述的程序当中,结果为输出十次的1.

 

2_2:静态局部变量:生命周期长,第一次执行语句时创建,程序结束时销毁。且作用域与局部变量相同,存放在全局(静态)变量区,且初始值为0。在上述的程序当中,结果为输出1~10.

 

3.动态内存:调用malloc()(还有calloc()和realloc())时创建,free()销毁.存放在堆中,且初始值为随机值。

 

4.函数:我们着重考虑它的内存区域和链接属性。

4_1:普通函数(外部函数):能够被外部文件引用。存放在代码段里,一般都写在.h文件里,可供外部文件使用。

4_2:静态函数(内部函数):只能被本文件引用。存放在代码段里,不想被外部函数使用,可以在函数声明部分的前头加上static (静态关键字)。

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值