欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

C語言中的typedef介紹,和C++11中using的用法補充

轉(zhuǎn)載自typedef介紹
本文介紹C語言中的關鍵字 typedef 的用法。 在C++11中用using替代typedef

創(chuàng)新互聯(lián)專注于企業(yè)全網(wǎng)整合營銷推廣、網(wǎng)站重做改版、安鄉(xiāng)網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5頁面制作、購物商城網(wǎng)站建設、集團公司官網(wǎng)建設、外貿(mào)營銷網(wǎng)站建設、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為安鄉(xiāng)等各大城市提供網(wǎng)站開發(fā)制作服務。

1 概述

typedef 為C語言的關鍵字,作用是為一種數(shù)據(jù)類型定義一個新名字,這里的數(shù)據(jù)類型包括內(nèi)部數(shù)據(jù)類型(int,char等)和自定義的數(shù)據(jù)類型(struct等)。

typedef 本身是一種存儲類的關鍵字,與 auto、extern、static、register 等關鍵字不能出現(xiàn)在同一個表達式中。

2 作用及用法

2.1 typedef的用法

使用 typedef 定義新類型的方法(步驟):在傳統(tǒng)的變量聲明表達式里,用(新的)類型名替換變量名,然后把關鍵字 typedef 加在該語句的開頭就可以了。

下面以兩個示例,描述 typedef 的用法步驟。

示例1:

【第一步】:int a; ———— 傳統(tǒng)變量聲明表達式
【第二步】:int myint_t; ———— 使用新的類型名myint_t替換變量名a
【第三步】:typedef int myint_t; ———— 在語句開頭加上typedef關鍵字,myint_t就是我們定義的新類型
C++11:using myint_t=int;

示例2:

【第一步】:void (pfunA)(int a); ———— 傳統(tǒng)變量(函數(shù))聲明表達式
【第二步】:void (
PFUNA)(int a); ———— 使用新的類型名PFUNA替換變量名pfunA
【第三步】:typedef void (*PFUNA)(int a); ———— 在語句開頭加上typedef關鍵字,PFUNA就是我們定義的新類型
C++11:using PFUNA=void(*)(int a) 表示一個函數(shù)指針

特別強調(diào):上述兩個示例,僅僅為了演示 typedef 的用法步驟,便于新手記憶 typedef 的用法。在實際編寫代碼時,只有“第三步”對應的語句會寫入代碼中!

2.2 typedef的作用

typedef 的作用有以下幾點:

1)typedef 的一個重要用途是定義機器無關的類型。例如,定義一個叫“REAL”的浮點類型,該浮點類型在目標機器上可以獲得最高的精度:

typedef long double REAL;

如果在不支持 long double 的機器上運行相關代碼,只需要修改對應的 typedef 語句,例如:

typedef double REAL;

或者:

typedef float REAL;

2)使用 typedef 為現(xiàn)有類型創(chuàng)建別名,給變量定義一個易于記憶且意義明確的新名字。例如:

typedef unsigned int UINT

3)使用 typedef 簡化一些比較復雜的類型聲明,例如:

typedef void (*PFunCallBack)(char* pMsg, unsigned int nMsgLen);

上述聲明引入了 PFunCallBack 類型作為函數(shù)指針的同義字,PFunCallBack 類型定義的指針會指向一個函數(shù),該函數(shù)包含兩個類型分別為 char* 和 unsigned int 的參數(shù),以及一個類型為 void 的返回值。通常,當函數(shù)的參數(shù)是一個回調(diào)函數(shù)時,就可能會使用 typedef 來簡化聲明。

例如,承接上面的示例的后續(xù)示例如下:

RedisSubCommand(const string& strKey, PFunCallBack pFunCallback, bool bOnlyOne);

*注意:*上述語句中類型名 PFunCallBack 與變量名 pFunCallback 的大小寫區(qū)別。

RedisSubCommand 函數(shù)的第二個參數(shù)是一個回調(diào)函數(shù),因此通過“PFunCallBack pFunCallback”(即,類型+變量)的形式,給出對應回調(diào)函數(shù)(pFunCallback)的地址。

在這個示例中,如果不使用 typedef 簡化聲明,RedisSubCommand 的函數(shù)聲明內(nèi)容如下:

RedisSubCommand(const string& strKey, void (*pFunCallback)(char* pMsg, unsigned int nMsgLen), bool bOnlyOne); 

從上面兩個函數(shù)聲明可以看出,在不使用 typedef 的情況下,RedisSubCommand 函數(shù)的聲明會復雜得多,不利于代碼的維護,同時增加出錯風險。

所以,在某些復雜的類型聲明中,使用 typedef 進行聲明的簡化是很有必要的。

3 typedef與#define

兩者的區(qū)別如下:

  • #define 進行簡單的進行字符串替換。 #define 宏定義可以使用 #ifdef、#ifndef 等來進行邏輯判斷,還可以使用 #undef 來取消定義。
  • typedef 是為一個類型起新名字。typedef 符合(C語言)范圍規(guī)則,使用 typedef 定義的變量類型,其作用范圍限制在所定義的函數(shù)或者文件內(nèi)(取決于此變量定義的位置),而宏定義則沒有這種特性。

通常,使用 typedef 要比使用 #define 要好,特別是在有指針的場合里。

下面列舉幾個示例。

3.1 示例1

代碼如下:

typedef char* pStr1;
#define pStr2 char* 
pStr1 s1, s2;
pStr2 s3, s4;

在上述的變量定義中,s1、s2、s3都被定義為 char* 類型;但是s4則定義成了 char 類型,而不是我們所預期的指針變量 char*,這是因為 #define 只做簡單的字符串替換,替換后的相關代碼等同于為:

char* s3, s4;

而使用 typedef 為 char* 定義了新類型 pStr1 后,相關代碼等同于為:

char *s3, *s4;

3.1 示例2

代碼如下:

typedef char *pStr;
char string[5]="test";
const char *p1=string;
const pStr p2=string;
p1++;
p2++;

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

根據(jù)上述錯誤信息能夠看出,p2 為只讀常量,所以 p2++ 出錯了。這個問題再一次提醒我們:typedef 和 #define 不同,typedef 不是簡單的文本替換,上述代碼中 const pStr p2 并不等于 const char * p2,pStr 是作為一個類型存在的,所以 const pStr p2 實際上是限制了 pStr 類型的 p2 變量,對 p2 常量進行了只讀限制。也就是說,const pStr p2 和 pStr const p2 本質(zhì)上沒有區(qū)別(可類比 const int p2 和 int const p2),都是對變量 p2 進行只讀限制,只不過此處變量 p2 的數(shù)據(jù)類型是我們自己定義的 pStr,而不是系統(tǒng)固有類型(如 int)而已。

所以,const pStr p2 的含義是:限定數(shù)據(jù)類型為 char * 的變量 p2 為只讀,因此 p2++ 錯誤。

*注意:*在本示例中,typedef 定義的新類型與編譯系統(tǒng)固有的類型沒有差別。

網(wǎng)頁名稱:C語言中的typedef介紹,和C++11中using的用法補充
當前鏈接:http://chinadenli.net/article14/dsoipde.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、網(wǎng)站內(nèi)鏈、云服務器、響應式網(wǎng)站全網(wǎng)營銷推廣、網(wǎng)頁設計公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應式網(wǎng)站建設