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.請問以下結構體定義是否正確,如果不正確請更正並寫出結構體定義的其他方法;
typedef
struct
tagnode
*pnode;
釋義: 錯誤
實際上以上結構體定義要完成兩步:
第一步是定義型別為tagnode的乙個結構體:
struct
tagnode
;
第二步是通過typedef將這個結構體型別指標定義為乙個pnode指標;
而在構造結構體時,並不能找到pnode型別到底是什麼,所以可以這麼處理:
1)在定義前宣告:
typedef struct tagnode *pnode; //將結構體tagnode定義為*pnode;
該操作類似上面,先宣告tagnode為結構體,然後將其指標定義為pnode型別;
2)在結構體內部用已經定義的tagnode:
typedef
struct
tagnode
*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. 下面程式是否有錯誤,找出錯誤行並說明原因?
typedef
char
*pstr;
char
string[4]=
"abc"
;
const
char
*p1=string;
const
pstr 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兩者...