在Linux中写一个程序,里面全局变量,局部变量,static,const,常数,数组,输出这些变量的地址(包括赋值的和没有赋值的,各类数据类型)
#include<stdio.h>
int a;
int b = 1;
int const c = 2;
static int d;
static int e = 3;
char src1[20];
char dest1[] = {'a','b'};
int main()
{
int f;
int g = 1;
int const h = 2;
static int i;
static int j = 3;
char src[20];
char dest[] = {'a','b'};
printf("全局变量,未初始化 %p\n",&a);
printf("全局变量,初始化 %p\n",&b);
printf("常全局变量 %p\n",&c);
printf("静态全局变量,未初始化 %p\n",&d);
printf("静态全局变量,初始化 %p\n",&e);
printf("全局数组,未初始化%p\n",src1);
printf("全局数组,初始化 %p\n",dest1);
printf("局部变量,未初始化 %p\n",&f);
printf("局部变量,初始化 %p\n",&g);
printf("常局部变量 %p\n",&h);
printf("静态局部变量,未初始化 %p\n",&i);
printf("静态局部变量,初始化 %p\n",&j);
printf("局部数组,未初始化%p\n",src);
printf("局部数组,初始化 %p\n",dest);
}
在Linux中的运行结果截图
由结果可以看出
常全局变量在一个区域
局部变量、数组(包括已初始化和未初始化)、常局部变量,在同一个区域
静态局部变量、常全局变量、静态全局变量、全局数组(包括已初始化和未初始化)在一片区域,但是已经初始化的在未初始化的之前
进程的地址空间分配详见C语言第三课