定义一个结构体指针需要分配存储空间
生活随笔
收集整理的這篇文章主要介紹了
定义一个结构体指针需要分配存储空间
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
link
問題:定義結構體指針時,有沒有同時分配存儲空間啊?看到結構體的數組定義好以后就直接可以用了。但是結構體指針在鏈表中還要malloc()申請空間。這是為什么啊?
答案:定義結構體指針時并沒有分配存儲空間,所以要用malloc()申請空間。
//下面僅僅是定義一個類型,不會產生變量,所以不存在分配空間的問題 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; //okdats2[0]->i = 20; //ok }總結
以上是生活随笔為你收集整理的定义一个结构体指针需要分配存储空间的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 结构指针的坑之(定义结构体指针时并没有分
- 下一篇: Ubuntu 20.04 LTS安装搜狗