在Linux中写一个程序,里面全局变量,局部变量,static,const,数组,输出这些变量的地址(包括赋值的和没有赋值的,各类数据类型)
#include <stdio.h>
#define MAX_SIZE 10
int a;
int b = 1;
static int st1;
static int st2 = 1;
const int e = 1;
char src1[MAX_SIZE];
char src2[MAX_SIZE] = {'a','b','c'};
int main()
{
int c;
int d = 1;
static int st3;
static int st4 = 1;
const int f = 1;
char src3[MAX_SIZE];
char src4[MAX_SIZE] = {'a','b','c'};
printf("无初始化全局变量地址:%p\n",&a);
printf("初始化全局变量地址:%p\n",&b);
printf("无初始化静态全局变量地址:%p\n",&st1);
printf("初始化静态全局变量地址:%p\n",&st2);
printf("常全局变量地址:%p\n",&e);
printf("无初始化全局数组地址:%p\n",src1);
printf("初始化全局数组地址:%p\n",src2);
printf("\n");
printf("无初始化局部变量地址:%p\n",&c);
printf("无初始化局部变量地址:%p\n",&d);
printf("无初始化静态局部变量地址:%p\n",&st3);
printf("初始化静态局部变量地址:%p\n",&st4);
printf("常局部变量地址:%p\n",&f);
printf("无初始化局部数组地址:%p\n",src3);
printf("初始化局部数组地址:%p\n",src4);
printf("\n");
return 0;
}
执行结果:
总结:
由结果可以看出
常全局变量在一个区域
局部变量、数组(包括已初始化和未初始化)、常局部变量,在同一个区域
静态局部变量、常全局变量、静态全局变量、全局数组(包括已初始化和未初始化)在一片区域,但是已经初始化的在未初始化的之前