定义一个结构体指针需要分配存储空间
生活随笔
收集整理的這篇文章主要介紹了
定义一个结构体指针需要分配存储空间
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
link
問題:定義結(jié)構(gòu)體指針時(shí),有沒有同時(shí)分配存儲(chǔ)空間啊?看到結(jié)構(gòu)體的數(shù)組定義好以后就直接可以用了。但是結(jié)構(gòu)體指針在鏈表中還要malloc()申請(qǐng)空間。這是為什么啊?
答案:定義結(jié)構(gòu)體指針時(shí)并沒有分配存儲(chǔ)空間,所以要用malloc()申請(qǐng)空間。
//下面僅僅是定義一個(gè)類型,不會(huì)產(chǎn)生變量,所以不存在分配空間的問題 struct data {int i;int j; };void main(void) {struct data dat1; //定義一個(gè)struct data類型的變量,和int i同理。printf("%d\n", sizeof(struct data)); //8個(gè)字節(jié)printf("%d\n", sizeof(dat1)); //8個(gè)字節(jié)struct data* pdat1;//定義一個(gè)struct data類型的指針,和int *pi 同理。printf("%d\n", sizeof(pdat1)); //4個(gè)字節(jié),就是一個(gè)指針的空間,pdat1并沒有結(jié)構(gòu)體變量的信息。pdat1 = (struct data*)malloc(sizeof(struct data)); //申請(qǐng)一個(gè)空間,把該空間地址給pdat1.printf("%d\n", sizeof(*pdat1)); //8個(gè)字節(jié)struct data dats1[2]; printf("%d\n", sizeof(dats1)); //16個(gè)字節(jié),兩個(gè)data變量,不是data指針。dats1[0].i = 20; //可以直接使用數(shù)組里面的結(jié)構(gòu)體變量dats1[0].j = 30;struct data* dats2[2]; //指針數(shù)組,包含兩個(gè)指針,而不是結(jié)構(gòu)體變量printf("%d\n", sizeof(dats2)); //8個(gè)字節(jié),兩個(gè)指針的大小dats2[0]->i = 20; //錯(cuò)誤!還沒有給dats2[0] 指針分配空間dats2[0]->i = 20; //錯(cuò)誤!還沒有給dats2[0] 指針分配空間dats2[0] = (struct data*)malloc(sizeof(struct data)); //分配空間dats2[0]->i = 20; //okdats2[0]->i = 20; //ok }總結(jié)
以上是生活随笔為你收集整理的定义一个结构体指针需要分配存储空间的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 结构指针的坑之(定义结构体指针时并没有分
- 下一篇: Ubuntu 20.04 LTS安装搜狗