對於位段,我們有兩個要求:
1.必須是int / unsigned int / signed int三種型別的
2.在每乙個成員的後面必須含有冒號和數字
只有具有了這兩個條件,才能被稱之為位段,
如下面例題:
struct a
;
這就是乙個簡單的位段,只要滿足上面這兩個要求,我們都可以稱之為位段
printf
("%d\n"
,sizeof
(struct a))
;//求乙個位段所佔的位元組
位段是乙個相對於來說存在較多的東西,我們只需要進行了解,可以認識就行了
列舉相對於來說就是乙個可以一一進行舉例出來的結構體,乙個星期裡面將周一到周天都可以分別舉例出來,性別裡面可以將男生和女生分別舉例出來.,在一組列舉裡面如果沒有給賦值,那就預設從0開始,依次遞增1,使用列舉有下面幾個優點:
1.讓**可以更容易的理解
2.有效的封裝
3.一次可以定義多個常量
enum ***
;
上面是乙個簡單的關於性別的列舉,因為我們給第乙個male進行了賦值,所以後面兩個依次就是101 和102,下面列印出來的也一樣
enum *** s =
male
;//或者進行別名的的定義
printf
("%d\n"
,s);
s=99
;//注意這個方式是錯誤的,這裡的99是乙個整型的型別,而這裡的s是乙個***的型別,型別不同,不能進行直接的賦值.
printf
("%d\n"
,female);
printf
("%d\n"
,unknown
);
上面是對列舉可以進行其他名字的定義,列印出來的值和之前也是一樣的,有點像指標,大家可以試著理解.
注意這裡的s=99是錯誤的,具體看注釋.
聯合體也是乙個比較特殊的自定義型別,因為它內部的成員公用的同一塊空間,所以才叫做聯合體.
對於聯合體而言,它在各個方面的牽制有點多,所以我們只需要知道,會簡單的利用就行了.
union test
;
這就是聯合體,聯合體必須有union這個關鍵字,下面是簡單的運用
union test t;
//!!!!!這裡是對於聯合體的乙個宣告,如果未在主函式中宣告,下面的步驟都不能進行執行
t.c =
0x11223344
;//簡單的賦予位址
printf
("%x\n"
,t.c)
;//%x是列印位址
t.a =
0x66
;//修改位址
printf
("%x\n"
,t.c)
;//再次列印
對於自定義型別我們在平常並不會經常的用到,就是在一些面試題上會運用到,我們知道一些基礎的知識就可以了. C語言中的自定義型別 enum列舉
列舉在c語言中其實是一些符號常量集。列舉定義了一些符號,這些符號的本質就是int型別的常量,每個符號和乙個常量繫結。這個符號就表示乙個自定義好的乙個識別碼,編譯器對列舉的認知就是符號常量所繫結的那個int型別的數字。例如可以使用數字1 2 3 4 5 6 7來代表周一到週末,但是純數字並不直觀,這個...
C語言中的自定義函式
c語言中可以使用系統函式也可以使用自己的函式,就是自定義函式 自定義函式分為四種 第一種 無參無返回值的 函式的宣告 void sayh 函式的實現 void sayh 第二種 有引數無返回值 函式的宣告 void pxsbx int c,int k 函式的實現 void pxsbxx int c,...
C語言中的自定義型別 struct結構體
c語言中的2種型別 原生型別 如int char等 和自定義型別 struct,enum等 結構體型別是是c語言中的使用者自定義型別,主要功能是對功能相關的資料進行封裝,它是乙個或多個變數的集合,這些變數的型別可以不同。例如一名學生可以由姓名和性別來描述,結構體中的成員也可以是乙個結構體,例如名字由...