共用體,列舉體和typedef

2022-07-12 19:03:09 字數 2190 閱讀 5824

共用體變數定義

union  共用體名

變數表列;

特點:1.同乙個記憶體段可以用來存放幾種不同型別的成員 ,但在每一瞬間只能存放其中一種,而不是同時存放幾種。共用體變數中起作用的是最後一次存放的成員。共用體變數的位址和它各個成員的位址都是同一位址。

2.不能對共用體變數名賦值,不能引用變數名來得到乙個值,不能在定義共用體變數時對它初始化。

3.不能把共用體變數作為函式引數,也不能是函式帶回共用體變數,但可以使用共用體變數的指標。(與結構體變數這種用法相仿)。

4.共用體型別可以出現在結構體型別定義中,也可以定義共用體陣列。反之,結構體也可以出現在共用體中,陣列也可以作為共用體的成員。

列舉體

宣告列舉體:enum  weekday;

宣告了乙個列舉型別enum  weekday,可以用此型別來定義變數:enum  weekday  workday,week-end;

workday,week-end  的值只能是列表中的乙個(sun-sat)。

說明:1.c編譯中,對列舉元素按常理處理,故稱列舉常量,不能對它們賦值。

2.列舉元素作為常量,它們是有值的,預設為0,1,2,3....。列舉元素的值也可在定義時由程式設計師制定。

3.列舉值可以用來作判斷比較。如:if(workday==mon).....    if(workday>sun)....。乙個整數不能直接賦給乙個列舉變數。

workday=(enum weekday)2;

用tyedef定義已有型別的別名:

int *p;                //

p是型別為int *型的變數

typedef int *p; //

p 是資料型別名(typedef-name),是int *p中p的資料型別int *

int num[100]; //

num是資料型別為 int[100]的變數

typedef int num[100]; //

num是含有100個元素的陣列型別的typedef-name,例如 int a[100];num b=a;

typedef int (*num)[100];//

int a[100]; num b=&a;

int *func(int); //

func的型別是函式識別符號,返回值型別int*,引數為int  

typedef int *func(int);  //

func是函式型別的typedef-name,該函式返回值為int*,引數為int。func *fptr; (fptr則是函式指標)

typedef int (*func)(int)  //

func是指向函式的指標的資料型別名。func fptr;(fptr則是函式指標)

typedef structdata; //

data birthday;

typedef struct

student stud;

typedef

long

duble real;

//定義與平台無關的資料型別,用real定義乙個浮點數,有些平台支援long duble,而有的平台不支援,則只需修改這裡即可。提高了可移植性

說明:1.習慣上常把用typedef宣告的型別名用大寫字母表示。

2.typedef與#define:#define是在預編譯是處理的,它只能做字元替換,而typedef是在編譯時處理的,不是做簡單的替換。

3.當不同 原始檔中用到同一型別資料(尤其像陣列,結構體,共用體,等)時,常用typedef宣告一些資料型別,把他們單獨放在乙個檔案中,然後在需要用到它們的檔案中把他們包含進來。

4.使用typedef有利於程式的通用與移植。

較複雜的原型宣告:

void (*b[10]) (void (*)());

變數名為b,先替換右邊部分括號裡的,pfunparam為別名一:

typedef void (*pfunparam)();

再替換左邊的變數b,pfunx為別名二:

typedef void (*pfunx)(pfunparam);

原宣告的最簡化版:

pfunx b[10];

結構體,共用體,列舉體,typedef

概念 結構體時一種構造資料型別 用途 把不同型別的資料組合成乙個整體 記憶體 各成員所佔記憶體空間的累加 一.結構體的宣告與定義變數的方法一共有三種 1.常規定義 struct aa 注意大括號後面有分號 變數定義 struct 機構體名 結構體變數名錶 如 struct aa aa,bb 前面的s...

結構體 共用體和列舉

1 c 中存在typedef使用方法如下 在程式之前typedef struct node 之後使用此結構體可以直接定義 node a,b 如果無typedef 應這樣定義 struct node a,b 不能省略struct 2 在此宣告結構體的定義方法 struct 名稱 struct 名稱 a...

列舉 共用體 typedef與巨集定義

c 語言列舉型別 實際問題中,有些變數的取值被限制在一定範圍內。例如,乙個星期內只有七天,一年 只有十二個月,乙個班每週有六門課程等。c 語言提供了一種列舉 enum 型別,可以列出所有可能的取值。定義形式為 enum 變數名 這些值也稱為列舉元素。注意最後的分號 不能少。例如,列出乙個星期有幾天 ...