局部变量:
创建在栈区(向下生长),生命周期存在于当前作用域中。
创建时若未初始化,则为随机值。
全局变量:
创建在static区,生命周期一直存在。
创建时若未初始化,则为0。
静态局部变量:
切断了外部链接属性。创建在static区。
创建时若未初始化,则为0。
全局变量和静态变量的存储是放在一块的,初始化了的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。
全局静态变量:
切断了外部链接属性,创建在static区,生命周期一直存在。
创建时若未初始化,则为0。
#include<stdio.h>#include<stdlib.h>intfun1(){staticintn=0;n++;returnn;}intmain(){intret=0;for(inti=0;i<10;i++){ret=fun1();printf("%d\n",ret);}system("pause");return0;}
输出1,2,3……10.
#include<stdio.h>#include<stdlib.h>staticintn;intfun1(){n=0;n++;returnn;}intmain(){intret=0;for(inti=0;i<10;i++){ret=fun1();printf("%d\n",ret);}system("pause");return0;}
输出10个1。
extern:
有外部链接属性,即可检测到外部文件。
static:
切断外部链接属性。
位于static区的变量:
整个生命周期均存在,如全局变量,静态变量。
#include<stdio.h>#include<stdlib.h>intb=20;intmain(){staticinta=10;intc=5;printf("%p\n",&a);printf("%p\n",&b);printf("%p\n",&c);system("pause");return0;}
由此可知,静态变量和全局变量的存储地址很近,在同一区域,即:均存储在static区。