結(jié)構(gòu)體別名 結(jié)構(gòu)體可以嵌套定義嗎?
結(jié)構(gòu)體可以嵌套定義嗎?可以在類定義中嵌套結(jié)構(gòu)。這里有幾個(gè)例子要解釋:對(duì)于聲明的(類外)結(jié)構(gòu)類型,在類定義中嵌入結(jié)構(gòu)變量沒(méi)有問(wèn)題。也可以在類定義中直接定義結(jié)構(gòu)類型,同時(shí)聲明結(jié)構(gòu)變量,但此結(jié)構(gòu)類型不能在類
結(jié)構(gòu)體可以嵌套定義嗎?
可以在類定義中嵌套結(jié)構(gòu)。這里有幾個(gè)例子要解釋:
對(duì)于聲明的(類外)結(jié)構(gòu)類型,在類定義中嵌入結(jié)構(gòu)變量沒(méi)有問(wèn)題。
也可以在類定義中直接定義結(jié)構(gòu)類型,同時(shí)聲明結(jié)構(gòu)變量,但此結(jié)構(gòu)類型不能在類之外使用。
不允許只定義類中的結(jié)構(gòu)類型而不同時(shí)聲明結(jié)構(gòu)變量(在結(jié)構(gòu)定義中也是如此)。
在大多數(shù)情況下,我們建議將struct type的定義放在類之外,這樣定義的struct就可以在更多的地方(類之外)使用,而不會(huì)出現(xiàn)邏輯歧義和編譯錯(cuò)誤。
事實(shí)上,類是C語(yǔ)言結(jié)構(gòu)在C語(yǔ)言中的擴(kuò)展。在C語(yǔ)言中,結(jié)構(gòu)可以看作是最簡(jiǎn)單的類“類嵌套”是C面向?qū)ο蟮囊环N應(yīng)用技巧,用于接口封裝(隱藏)和成員共享。但是,它與嵌套結(jié)構(gòu)關(guān)系不大。如果你感興趣,你可以讀相關(guān)的書。
此外,還有兩種形式的結(jié)構(gòu)定義,一種帶有typedef關(guān)鍵字,另一種沒(méi)有typedef關(guān)鍵字。這兩個(gè)定義是不同的。簡(jiǎn)而言之,typedef聲明了一個(gè)“變量類型”。沒(méi)有typedef,它直接聲明結(jié)構(gòu)變量。具體應(yīng)用差異請(qǐng)參考結(jié)構(gòu)聲明相關(guān)書籍和章節(jié)。
c語(yǔ)言結(jié)構(gòu)體可以隨意嵌套結(jié)構(gòu)體么?
早期的純C編譯器要求結(jié)構(gòu)類型必須使用struct關(guān)鍵字編寫,而不僅僅是結(jié)構(gòu)名稱。后來(lái),與C兼容的編譯器允許編寫結(jié)構(gòu)名稱。因此,如果在嵌套時(shí)在結(jié)構(gòu)的成員名稱前面寫struct(struct order),則可以傳遞任何編譯器
Typedef只是類型的別名。以上兩種定義都可以。因?yàn)閟truct lnode和lnode都代表C中的結(jié)構(gòu){int data/struct lnode*next},即使它們有相同的名稱,也可以區(qū)分結(jié)構(gòu)和類型名稱,所以定義是正確的。
C數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu)體可以嵌套使用嗎?
要為結(jié)構(gòu)賦值,請(qǐng)先定義結(jié)構(gòu),然后分別為其成員賦值。例如,
#include<studio。H>
結(jié)構(gòu)?學(xué)生
{
智力?Num
字符?Name[10
}
無(wú)效?Main()
{
結(jié)構(gòu)?學(xué)生?S
printf(“輸入學(xué)號(hào):n”)
scanf(%d”)&安培數(shù))//Scanf assign to num member of struct
printf(“enter name:n”)
Scanf(“%s”,&安培名稱)
Printf(“輸入信息為:學(xué)號(hào):%D,姓名::%sn”,s.num?,s.name)
}運(yùn)行屏幕截圖: