定义结构体指针,内存空间分配问题

 //下面仅仅是定义一个类型,不会产生变量,所以不存在分配空间的问题
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
 
    
}
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页