共用體union
和結構體struct
在型別定義、變數定義、使用方法上很相似。
舉個栗子:
#include
struct my_struct
;union my_union
;int
main
(int argc,
char
**ar**)
輸出:
0x7ffdeebbfd50--0x7ffdeebbfd54.
0x7ffdeebbfd40--0x7ffdeebbfd40.
size of struct = 8.
size of union = 4.
共用體和結構體的不同之處在於:
具體的說,共同體內的a
,b
實際占用同一塊記憶體,當我們使用tmp2.a
時,就按照int
型別來解析這個記憶體空間中的二進位制機器數,使用tmp2.b
時,就按照char
型別來解析記憶體空間中的二進位制機器數。
共同體的sizeof
測到的大小實際是共同體中各個元素裡面占用記憶體最大的那個元素的大小,因為可以存的下這個就一定能夠存的下其他的元素,例如上面**中定義的共同體,大小就是4位元組,因為它的成員中最大的就是佔4位元組的int
型變數。
共同體中的元素不存在記憶體對齊的問題,因為共同體中實際只有乙個記憶體空間,共用體裡的成員都是從同乙個位址開始的,開始位址就是整個共同體占有的記憶體空間的首位址,所以不涉及記憶體對齊。
真值與機器數的概念:日常生活中我們看到的+5,-8等帶有+,-符號的數值就是真值。但是計算機不認識+,-符號,我們知道二進位制有0和1,剛好就可以表示乙個數的正負兩種符號,這樣乙個真值就可以數值化成機器數了,所謂機器數,就是實際儲存在計算機裡面的資料形式,它有原碼,補碼,反碼等形式。
共用體就用在那種對同乙個記憶體單元進行多種不同規則解析的這種情況下。
舉個栗子:
#include
union my_union
;int
main
(int argc,
char
**ar**)
輸出:
共用體方式 = 1228890.375000.
指標方式 = 1228890.375000.
c
語言中其實是可以沒有共用體的,用指標和強制型別轉換可以替代共用體完成同樣的功能,但是共用體的方式更簡單、更便捷、更好理解。 C語言中的自定義型別 enum列舉
列舉在c語言中其實是一些符號常量集。列舉定義了一些符號,這些符號的本質就是int型別的常量,每個符號和乙個常量繫結。這個符號就表示乙個自定義好的乙個識別碼,編譯器對列舉的認知就是符號常量所繫結的那個int型別的數字。例如可以使用數字1 2 3 4 5 6 7來代表周一到週末,但是純數字並不直觀,這個...
c語言 自定義型別
struct stu 分號不能丟 匿名結構體型別 struct x struct a 20 p p x 非法的操作,上面倆種完全是不同的宣告 struct node 結構體的自引用 struct node n1 null 直接初始化 struct node n2 null 結構體巢狀初始化 先來看下...
C語言自定義型別
在學習c語言的時候,它有很多的自定義型別,例如 結構體,列舉,聯合。這些型別在我們的日常使用的時候,或多或少的都會遇見到,下面就系統的介紹一下這幾種型別。一.結構體 1.結構體型別的宣告 通俗點來說,結構就是一些值的集合,這些值稱為成員變數,結構體的每個成員可以是不同型別的成員變數。如下所示 str...