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

来源:互联网 发布:php命令行死循环 编辑:程序博客网 时间:2024/05/16 09:06


 

生命周期

作用域

默认值

内存区域

链接属性

 

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

 

普通全局变量

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

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

 

0

全局变量区

外部(其他文件也能用)

静态全局变量

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

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

 

0

全局变量区

内部(只能本文件使用)

 

局部变量

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

普通局部变量

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

随机值

局部变量区

 

静态局部变量(不常用)

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

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

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 (静态关键字)


阅读全文
1 0
原创粉丝点击