指针与其存储空间的问题

来源:互联网 发布:微博个性化域名 编辑:程序博客网 时间:2024/05/17 01:59
 //下面仅仅是定义一个类型,不会产生变量,所以不存在分配空间的问题
struct data
{
    int i;
    int j;
};

void main(void)
{
    struct data dat1; //定义一个struct data类型的变量,和int i同理。
    printf("%d\n"sizeof(struct data)); //8个字节
    printf("%d\n"sizeof(dat1));        //8个字节

    struct data* pdat1;//定义一个struct data类型的指针,和int *pi 同理。
    printf("%d\n"sizeof(pdat1));        //4个字节,就是一个指针的空间,pdat1并没有结构体变量的信息。

    pdat1 = (struct data*)malloc(sizeof(struct data)); //申请一个空间,把该空间地址给pdat1.
    printf("%d\n"sizeof(*pdat1));      //8个字节

    struct data dats1[2]; 
    printf("%d\n"sizeof(dats1));     //16个字节,两个data变量,不是data指针。
    dats1[0].i = 20;  //可以直接使用数组里面的结构体变量
    dats1[0].j = 30;
    
    struct data* dats2[2]; //指针数组,包含两个指针,而不是结构体变量
    printf("%d\n"sizeof(dats2));  //8个字节,两个指针的大小
    dats2[0]->i = 20; //错误!还没有给dats2[0] 指针分配空间
    dats2[0]->i = 20; //错误!还没有给dats2[0] 指针分配空间
    dats2[0] = (struct data*)malloc(sizeof(struct data)); //分配空间
    dats2[0]->i = 20; //ok
    dats2[0]->i = 20; //ok
 
    
}
1 0
原创粉丝点击