日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

声明和定义结构体需要注意的问题

發(fā)布時(shí)間:2025/4/16 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 声明和定义结构体需要注意的问题 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1、為什么不能在聲明 結(jié)構(gòu)體的時(shí)候直接給成員變量賦聲明?(1)聲明變量uint8_t ?i;(2)聲明函數(shù)void func(void);(3)聲明變量類型typedef ?int int32_t(4)結(jié)構(gòu)體的聲明struct Node{uint8_t ?i;uint32_temp;};(5)聯(lián)合體的聲明union Test{uint8_t ?i;uint32_temp;};問題分析:在上面聲明的過程中,所有看似din定義的東西都不能被賦值,因?yàn)樗鼈冎皇窍蛴?jì)算機(jī)說明了一下,我有這么個(gè)東西,而不是真正的定義。如果你進(jìn)行了定義,那么要么被忽略,要么就警告甚至報(bào)錯(cuò)。一定要能區(qū)分聲明和定義。聲明的時(shí)候,計(jì)算機(jī)沒有為它分配空間,只有定義了,才有空間。所以你是無法為沒有空間的東西賦值的。例如下面這種寫法:struct Node{uint8_t ?i = 10;uint32_temp = 5;};就是不合法的。因?yàn)榇藭r(shí)只是聲明,沒有定義變量,自然沒空間,所以這種寫法不合法。要給i和temp賦值,必須有結(jié)構(gòu)體變量,例如寫成:第一種方法:struct Node{uint8_t ?i ;uint32_temp;};struct Node node;node.i=10;node.temp = 5;第二種方法:struct Node{uint8_t ?i ;uint32_temp;}node;node.i = 10;node.temp=5;以上兩種寫法,都是合法的。2、結(jié)構(gòu)體里為什么不能定義自己,而只能定義自己的指針?如果寫成:struct Node{uint8_t data;struct Node next;};那么你會(huì)發(fā)現(xiàn),這個(gè)結(jié)構(gòu)體將會(huì)不知道自己有多大。如果我們用它定義了一個(gè)變量:struct Node node;那么,這個(gè)node里有個(gè)next,也就是node.next,node.next里還有個(gè)next,以此類推,node.next.next.next.next……無窮無盡了。所以這樣的結(jié)構(gòu)會(huì)導(dǎo)致計(jì)算機(jī)無法判斷它的大小。而如果我們寫成指針:struct Node{uint8_t data;struct Node *next;};那么任何指針的大小都是一定的(32位編譯器下是4字節(jié),64位編譯器下是8字節(jié)),所以這個(gè)結(jié)構(gòu)體可以確定大小。如果我們用它定義了一個(gè)變量:struct Node node;那么此時(shí),node.next是野指針,在你給它分配空間之前,node.next->next是不存在的,所以它的存在是合法的。

?

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的声明和定义结构体需要注意的问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。