typedef與 define的使用時注意點

2021-06-27 13:12:03 字數 2215 閱讀 7562

1.例:  typedef   static  int    stint;   //是否 正確?

釋義: 錯誤,

typedef 

本身是一種儲存類的關鍵字,與auto、extern、mutable、static、register等關鍵字不能出現在同乙個表示式中。

2.請用陣列定義64位元組的char陣列?

釋義:  typedef char szname[64];

3.請用一句**定義char 為char以及其指標型別的pchar?

釋義:   typedef  char char,*pchar;

對於同乙個表示式或字串要定義為兩個或兩個以上的別名則需要用','分開;

同時,對於定義不同資料型別時,其型別符號,比如指標 '*' 要緊跟在別名前;

4.請問以下結構體定義是否正確,如果不正確請更正並寫出結構體定義的其他方法;

typedefstructtagnode

*pnode;

釋義: 錯誤

實際上以上結構體定義要完成兩步:

第一步是定義型別為tagnode的乙個結構體:

structtagnode

;

第二步是通過typedef將這個結構體型別指標定義為乙個pnode指標;

而在構造結構體時,並不能找到pnode型別到底是什麼,所以可以這麼處理:

1)在定義前宣告:

typedef struct tagnode *pnode; //將結構體tagnode定義為*pnode;

該操作類似上面,先宣告tagnode為結構體,然後將其指標定義為pnode型別;

2)在結構體內部用已經定義的tagnode:

typedefstructtagnode

*pnode;

即: 編譯器

支援用typedef給乙個還未完全宣告的型別起新名字;

5.#define pint1 int *;

typedef int *pint2;

請問: pint1 a1,b1; 與

pint2 a2,b2;

是否相同,如果不同請說明原因?

釋義: 不同;b1被定義為int,而a1,a2,b2則被定義為int*;

#define定義後,編譯器將定義項只是進行簡單的文字替換,即:

int* a,b;

二typedef則是實實在在的將pint2定義為了一種資料型別;其編譯器編譯的時候還是按照

型別表示符號進行的 : pint2 a2,b2;

6. 下面程式是否有錯誤,找出錯誤行並說明原因?

typedefchar*pstr;

charstring[4]="abc";

constchar*p1=string;

constpstr p2=string;

p1++;

p2++;

釋義: 錯誤行出現在p2++中;

再次提醒,typedef在編譯器中並不是進行簡單的文字替換;

如果pstr被定義為: #define pstr char*;

則編譯器會將 : const pstr p2 = string;直接替換為: const char* p2 = string;

此時沒有任何問題(常量指標嘛,指標本身是可以改變的);

而這裡用的是typedef,還是5知識點說過的,編譯器編譯的時候就認為pstr是乙個型別,就像乙個long型別一樣,

它就是乙個資料型別,類似: const long p2;這樣是不是您就明白了?

如此一來,p2就變成了常量了,是不可以改變的;

typedef與 define 的區別

一 typedef的用法 typedef常用來定義乙個識別符號及關鍵字的別名,它是語言編譯過程的一部分,但它並不實際分配記憶體空間,例項像 typedef int int typedef int array 10 typedef int pint typedef可以增強程式的可讀性,以及識別符號的靈...

typedef與 define 的區別

typedef與 define 的區別 一 typedef的用法 typedef常用來定義乙個識別符號及關鍵字的別名,它是語言編譯過程的一部分,但它並不實際分配記憶體空間,例項像 typedef int int typedef int array 10 typedef int pint typede...

typedef與 define的區別

typedef與 define的區別 從以上的概念便也能基本清楚,typedef只是為了增加可讀性而為識別符號另起的新名稱 僅僅只是個別名 而 define 原本在c中是為了定義常量,到了c const enum inline的出現使它也漸漸成為了起別名的工具。有時很容易搞不清楚與typedef兩者...