全局变量,局部变量,static,const,数组变量的地址打印及地址空间总结

来源:互联网 发布:网络问卷调查怎么弄 编辑:程序博客网 时间:2024/05/21 12:49

Linux中写一个程序,里面全局变量,局部变量,staticconst,数组,输出这些变量的地址(包括赋值的和没有赋值的,各类数据类型)

#include <stdio.h>#define MAX_SIZE 10int 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;}

执行结果:


总结:

由结果可以看出 
常全局变量在一个区域 
局部变量、数组(包括已初始化和未初始化)、常局部变量,在同一个区域 
静态局部变量、常全局变量、静态全局变量、全局数组(包括已初始化和未初始化)在一片区域,但是已经初始化的在未初始化的之前


0 0