關於typedef的用法 常量指標 指標常量

2021-09-29 10:29:34 字數 1988 閱讀 8345

typedef的四種用法:

用途1、定義一種型別的別名,而不只是一種簡單的巨集替換;可以用作同時宣告指標的多個物件。

比如:char* pa,pb; //它只宣告了乙個指向字元變數的指標(char pa;) 以及 乙個字元變數(char pb;)

typedef char pchar;

pchar pa,pb; //同時宣告了兩個指向字元變數的指標

雖然char *pa,*pb;但是在有很多指標的情況下,typedef的方式更省事。

用途2、

以前的**中,宣告struct新物件的時候,必須帶上struct,即struct 結構名 物件名

struct tagpoint

;struct tagpoint p1;

但是在c++中,可以直接寫:結構體 物件名 即tagpoint p1;

typedef struct tagpoint

point;

point p1; //這樣就可以少寫乙個struct

用途3、為複雜的宣告定義乙個新的簡單的別名

兩種模式:

typedef ()(); //函式指標

typedef (); //陣列指標

陷阱:陷阱一:

記住:typedef是定義一種型別的新別名,不同於巨集,它不是簡單的字串替換

【當const與typedef一起出現時,typedef不是簡單的字串替換】

typedef char* pstr;

int mystrcmp(const pstr,const pstr);

const pstr不等於const char*,實際上相當於char* const

原因在於:const給予了整個指標以常量性,也就形成了常量指標[怎麼理解]char* const

陷阱二:

typedef static int int2; //不可行 編譯失敗,會提示「指定了乙個以上的儲存類」

typedef 與 #define

1、typedef char* pstr1;

#define pstr2 char*

pstr1 s1,s2;

pstr2 s3,s4;

//s4被定義為char

//#define這只是簡單的字串替換,而typedef是為乙個型別起乙個新名字。

2、typedef char* pstr;

char string[4]=」abc」;

const char p1=string;

const pstr p2=string;

p1++; //這裡p1++ 並不是改變string的值(如果這裡的string是簡單乙個常量,不是陣列,那麼這麼寫就是錯誤的) 其是改變指向的位置

p2++; //錯誤的

const pstr p2 並不等於 const char p2

等於char* const p2=string p2只能指向string[0]

p2的資料型別是我們自己定義的而不是系統固有的

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

常量指標:

表示這個指標是乙個指向常量的指標;

指標指向的物件是常量,那麼這個物件不能被更改。

宣告:const int *p; //指標p指向常量int,所以是常量

int const *p;

e.g.

int a,b;

const int *p=&a;

p=&b;//正確,可以重新賦值

*p=8; //錯誤,不可以修改

指標常量:

表示乙個指標本身為常量及指標本身帶有const屬性。

一般常用於當乙個指標由始至終都指向乙個物件時使用。

e.g.

int a;

int * const p=&a;

*p=8; //*p可以修改

p++; //error

const int* const p=&a; //*p與p均不可以修改

關於typedef的用法

在計算機程式語言中用來為複雜的宣告定義簡單的別名,與巨集定義有些差異。它本身是一種儲存類的關鍵字,與auto extern mutable static register等關鍵字不能出現在同乙個表示式中。typedef宣告,簡稱typedef,為現有型別建立乙個新的名字,或稱為型別別名,在 結構體定...

關於typedef的用法

在c 中定義結構體時可以採用如下的定義 struct student1 int num char name 10 stu1 student1 stu1 此時的stu1即是乙個結構體變數,可使用stu1.num 1來進行賦值。在使用typedef時,將上述定義改為 typedef struct stu...

關於typedef的用法

1.常規變數型別定義 eg typedef unsigned char uchar 描述 uchar等價於unsigned char型別定義 uchar c宣告等於unsigned char c宣告 2.陣列型別定義 eg typedef int array 2 描述 array等價於 int 2 ...