自定義型別 結構體 列舉 聯合

2021-09-26 15:26:00 字數 1330 閱讀 3587

1、結構體的建立

//建立乙個簡單的結構體:

struct stu; //末尾的分號不可以丟掉

2.結構體初始化

struct stu1;

struct stu1=; //對stu1的變數同時賦初值(初始化)

3.結構體內存對齊(熟記四條規則)

畫個**釋一下:

同樣我們可以用乙個預處理指令來修改預設對齊數,如下:

#pragma pack(8)    //設定預設對齊數為8;

#pragma pack() //設定對齊數還原為預設;

4.結構體傳參

struct s1;

struct s1 s=,50};

//結構體傳引數

void printf1(struct s1 s)

//結構體位址傳引數

void printf2(struct s1* ps)

int main()

首選printf2函式,因為函式傳參的時候,引數是需要壓棧的,如果直接傳結構體會導致系統開銷較大,因此效率和效能大大降低。

4.位段

1)位段的成員必須是int、unsigned int、signed int。

2)位段的成員名後面有乙個冒號和乙個數字。

struct a;
位段的大小在不同的編譯器裡是不一樣的,所以研究位段的記憶體布局沒有意義!

enum ***;
由於聯合中各成員共用同一段空間,所以聯合長度至少可以容納最大的成員。

但是當最大成員大小不是 最大對齊數的整數倍時,就要對齊到最大對齊數的整數倍。

#includeint main()

tmp=;

//如果列印出的是0x78,表明是litter-endian

//如果列印出的是0x12,表明是big-endian

if(tmp.b==0x78)

printf("the endian of cpu is litter-endian.\n");

else

printf("the endian of cpu is big-endian.\n");

return 0;

}

自定義型別 結構體 列舉 聯合

結構體 所謂結構體,就是將一大堆值放在一起,建立乙個新的型別,這些成員可以是不同型別的變數。struct tag variable list tag 要求 1.見名知意 2.可以省略 3.不建議省略 member list c語言中,不能為空 variable list 變數列表,可以省略,建議省略...

自定義型別 結構體,列舉,聯合

首先先說一下c語言的資料型別,其框架型別如圖所示 今天主要說一下結構體,列舉,聯合這三種自定義型別。1,結構體 1.1 結構體的宣告 結構體是一些值的集合,這些值稱為成員變數,結構體的每個成員可以是不同型別得變數。1 結構體的成員 結構體的成員可以是標量,陣列,指標,甚至是其他結構體。2 結構體的宣...

自定義型別 結構體,列舉,聯合

結構體的宣告 struct tag variable list 例如描述乙個學生 struct stu 分號不能丟特殊的宣告 在宣告結構的時候,可以不完全的宣告。比如 匿名結構體型別 struct x struct a 20 p 警告 編譯器會把上面的兩個宣告當成完全不同的兩個型別。所以是非法的。結...