C語言中的自定義型別 結構體 列舉 聯合

2021-08-19 19:12:17 字數 2364 閱讀 4856

我們知道c語言基本資料型別有:

本篇將重點介紹c語言中的自定義型別:結構體、列舉、聯合

struct stu

;int main()

**含義:

#define _crt_secure_no_warnings 1

#include

#include

struct

x;struct

*p;int main()

上面的**執行後發現是有bug的!

這是因為編輯器會把上面兩個宣告當成完全不同的兩個型別。

正確**:

struct 

x,*p;

int main()

struct s s; 

strcpy(s.name, "zhangsan");// ֵ使用.訪問name成員

s.age = 20;//使用.訪問age成員

struct s 

s;void print(struct s* ps)

struct node 

;

struct b; //不完整宣告

struct a

; struct b

;

總的來說,結構體的記憶體對齊是拿空間來換取時間的做法

struct s1

printf("%s\n",sizeof(struct s1));//1+3+4+1+3=12

struct s2

; printf("%d\n", sizeof(struct s2));//1+1+2+4=8

struct s3

; printf("%d\n", sizeof(struct s3));//8+1+3+4=16

struct s4

printf("%d\n", sizeof(struct s4));//1+7+16+8=32

struct s

void print(struct s *ps)

int main()

位段的分配記憶體

跟結構相比,位段可以達到同樣的效果,但是可以很好的節省空間,但是有跨平台的問題存在

enum 列舉名 列舉變數;
如果列舉沒有初始化, 即省掉」=整型常數」時, 則從第乙個識別符號開始, 順

次賦給識別符號0, 1, 2, …。但當列舉中的某個成員賦值後, 其後的成員按依次

加1的規則確定其值。

enum color

;enum color clr = green;

union 共用體名

變數表列;

我們用一段**說明,用結構體判斷編譯器的大小端(面試題)

C語言中的自定義型別(結構體 列舉及聯合)

結構體的記憶體對齊 位段列舉 聯合結構體是一些值的集合,這些值被稱為成員變數,結構的每個成員可以是不同型別的變數。struct piont p1 宣告結構體型別,同時定義變數p1 struct point p2 定義結構體變數p2 struct point p3 初始化 定義變數同時賦值 struc...

C語言中的自定義型別 結構體,列舉,聯合(總結)

結構體型別的宣告struct tag variable list 例如描述乙個學生 struct stu 分號不能丟 特殊宣告 匿名結構體型別 struct x struct a 20 p 結構的自引用 1 struct node 該結構體定義是錯誤的,因為結構體的大小是根據其中的成員變數的大小以及...

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

二 列舉 三 聯合 1.結構體型別建立 struct stu 定義乙個學生結構體 分號不能丟 特殊的宣告 在宣告結構的時候,可以不完全的宣告 比如 匿名結構體型別 struct x struct a 20 p p x 非法,編譯器會把上面的兩個宣告當成完全不同的兩個型別 結構的不完整宣告 struc...