包括結(jié)構(gòu)體肠缨、共同體、枚舉類型
自定義數(shù)據(jù)類型盏阶,顧名思義晒奕,就是用戶自己建立的數(shù)據(jù)類型。
結(jié)構(gòu)體(struct)(本節(jié)重點)
結(jié)構(gòu)體的基本語法:
例:
整體賦值就是第一個賦的值對應(yīng)第一個定義的成員名斟,第二個賦的值對應(yīng)第二個定義的成員...
但是如果是數(shù)組變量可以用strcpy(記得在頭文件加入#include <string.h>)來進(jìn)行賦值:
(不知道為什么我自己執(zhí)行也是報錯)
注意:在引用結(jié)構(gòu)體的時候也要加上struct(不知道為什么視頻里沒加也沒報錯)脑慧,反正自己實踐的時候報錯了,說是未識別標(biāo)識符砰盐。
typedef(取別名)
在主函數(shù)中闷袒,用hero就可以替代Hero的功能。如果沒有取結(jié)構(gòu)名岩梳,那么這個結(jié)構(gòu)體的名稱就是使用typedef設(shè)置的別名囊骤。
如果沒有設(shè)置typedef也沒有設(shè)置結(jié)構(gòu)體的名字。
像這種情況冀值,s1也物,s2,s3都是該結(jié)構(gòu)體的變量列疗,可以直接賦值滑蚯。
這樣也可以賦值(視頻中),但是不知道為什么我的一直報錯抵栈,百度了也無果告材,所以就是先知道一下這樣也可以
bbb這是分割線
或者直接在定義變量的后面賦值,類似于以上的情況
結(jié)構(gòu)體數(shù)組
如果變量是數(shù)組(結(jié)構(gòu)體數(shù)組)古劲,那么定義起來就跟二維數(shù)組類似(本來結(jié)構(gòu)體就類似于一個數(shù)組创葡,加上變量數(shù)組也就跟二維數(shù)組很像),輸出就也是用占位符绢慢,后面就是用哪個變量.結(jié)構(gòu)體內(nèi)的變量灿渴。
如何輸出變量里面的所有東西(沒錯洛波!還是那個for循環(huán))
結(jié)構(gòu)體的嵌套
顧名思義就是一個結(jié)構(gòu)體里面有嵌套了結(jié)構(gòu)體
結(jié)構(gòu)體的內(nèi)存計算方法
結(jié)構(gòu)體有個內(nèi)存對齊標(biāo)準(zhǔn),以該結(jié)構(gòu)體中最大的基本數(shù)據(jù)類型所占的內(nèi)存進(jìn)行對齊骚露。
一般來說 int四個字節(jié)蹬挤,char一個字節(jié),加起來應(yīng)該是九個字節(jié)棘幸,但是因為結(jié)構(gòu)體有內(nèi)存對齊標(biāo)準(zhǔn)焰扳,向最大的對齊,所以char類型也占四個字節(jié)盡管只用到了一個字節(jié)误续。
這種情況就是int還是最大的字節(jié)吨悍,數(shù)組c有4+4+4(多了2)個字節(jié),float(原本就是四個字節(jié))也是四個字節(jié)蹋嵌,所以一共二十個字節(jié)育瓜。
上圖的b就是我們代碼的c,最下面那個格子就是float栽烂。
例:
這個double有八個字節(jié)躏仇,所以int也要分配八個(多了四個),于是char的四個字節(jié)分配到int多的字節(jié)中腺办,還剩六個就分配一個八個字節(jié)焰手,所以一共24個字節(jié)。
規(guī)則:
例:
如果按照直接找最大的對齊怀喉,那么最大的就是double八個字節(jié)书妻,a+b占五個字節(jié),c占10個就是用了兩個八個字節(jié)躬拢,double八個字節(jié)驻子,那就是24個字節(jié),為什么是32個字節(jié)呢估灿?
所以我們是按照順序找最大:
解釋起來就是這樣3绾恰!(沒錯是本人純手工繪制的O谠)
共同體(union)
定義方法與結(jié)構(gòu)體類似域慷,區(qū)別就在于計算內(nèi)存的方式不同。
像這個最大的字節(jié)就是十個字節(jié)汗销,但是要按照最大的基本數(shù)據(jù)類型進(jìn)行對齊犹褒,所以就是四個字節(jié),所以就是4+4+4弛针,一共12個字節(jié)叠骑。
枚舉類型(enum)
內(nèi)存大小就是int類型的所占大小
可以這么定義(enum[枚舉名]{枚舉列表}),枚舉的元素會有默認(rèn)值削茁,是整數(shù)宙枷,第一個元素默認(rèn)的值為0掉房,第n個元素的默認(rèn)值為第n-1個元素+1。
其中的元素不一定就是說要規(guī)定是什么類型的
_getch是用來接收輸入的(在頭文件要加入#include <conio.h>)慰丛,其中w代表up卓囚,s代表down...