結構體 共用體和列舉

2021-10-20 00:19:29 字數 1806 閱讀 9273

1、c++中存在typedef使用方法如下:

在程式之前typedef struct node{};

之後使用此結構體可以直接定義:node a,b;

如果無typedef 應這樣定義 struct node a,b;

不能省略struct;

2、在此宣告結構體的定義方法:

struct 名稱

{};struct 名稱 a;

名稱通常為node;

1、#includeusing namespace std; typedef char * pstr1; #define pstr2 char *;

在上述的變數定義中,s1、s2、s3都被定義為char *,而s4則定義成了char,不是我們所預期的指標變數,根本原因就在於#define只是簡單的字串替換而typedef則是為乙個型別起新名字。

2、typedef char * pstr; char string[4] = "abc"; const char *p1 = string; const pstr p2 = string; p1++; p2++;

是p2++出錯了。這個問題再一次提醒我們:typedef和#define不同,它不是簡單的文字替換。上述**中const pstr p2並不等於const char * p2。const pstr p2和const long x本質上沒有區別,都是對變數進行唯讀限制,只不過此處變數p2的資料型別是我們自己定義的而不是系統固有型別而已。因此,const pstr p2的含義是:限定資料型別為char *的變數p2為唯讀,因此p2++錯誤。

在編譯過程中,報錯如下:

根據錯誤資訊,能夠看出p2為唯讀的常量了,所以p2++出錯了。這個問題再一次提醒我們:typedef和#define不同,typedef不是簡單的文字替換,上述**中const pstr p2並不等於const char * p2,pstr是作為乙個型別存在的,所以const pstr p2實際上限制了pstr型別的p2變數,對p2常量進行了唯讀限制。也就是說,const pstr p2和pstr const p2本質上沒有區別(可模擬const int p2和int const p2),都是對變數p2進行唯讀限制,只不過此處變數p2的資料型別是我們自己定義的(pstr),而不是系統固有型別(如int)而已。

所以,const pstr p2的含義是:限定資料型別為char *的變數p2為唯讀,因此p2++錯誤。

注意:在本示例中,typedef定義的新型別與編譯系統固有的型別沒有差別。

3、指標使用const

(1)指標本身是常量不可變

char* const pcontent;

(2)指標所指向的內容是常量不可變

const char *pcontent;

(3)兩者都不可變

const char* const pcontent;

(4)還有其中區別方法,沿著號劃一條線:

如果const位於的左側,則const就是用來修飾指標所指向的變數,即指標指向為常量;

如果const位於*的右側,const就是修飾指標本身,即指標本身是常量。

宣告方法與過程與結構體類似;

即union替換struct,scanf與printf時宣告輸入輸出型別;

使用可能性較小

作為列舉,宣告列舉物件時無「;」

即以下過程:

enum

;列舉過程中第一項為0,之後一直+1,即sunday=6;

若宣告改為monday=1,之後同樣+1;

結構體 共用體 列舉

結構體 共用體 列舉 分析 首先宣告的結構體元素year的位址是最低的 0012ff74 而最後宣告的day的位址是最高的 0012ff7c 而我們又知道在棧中宣告變數的時候,位址是從高到低的分配的.因此,切記在結構體中宣告的變數與直接在外面宣告是不一樣的.在結構體中,最先宣告的變數放在最低位的.另...

列舉,結構體,共用體

列舉的定義 enum log level dbg,inf,war,err,fat,all,offvoid writeinfor log level level switch level case dbg printf d n dbg 上述定義的列舉型別,預設為dbg 0,inf 1,依次類推。1 列...

結構體 共用體 列舉

一 結構體 1.結構體和類一樣定義時最後要加分號 2.結構體型別定義變數時struct關鍵字不能省略 3定義好的結構體,系統對之不分配儲存單元 4.c99標準允許對某一成員初始化 5.不能企圖輸出結構體變數名來達到輸出結構體的目的 6.同類結構體間可以相互賦值 二 共用體 1.幾個不同的變數共享同一...