程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 基於typedef的用法詳解

基於typedef的用法詳解

編輯:關於C++

基於typedef的用法詳解。本站提示廣大學習愛好者:(基於typedef的用法詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是基於typedef的用法詳解正文


或許老手用這個症結字不多,但它倒是一個很有效的症結字,可使代碼模塊化水平更好(即與其它代碼的聯系關系較少),在C++中照樣完成Traits技巧的基本,也是模板編程的根本語法之一。

若說變量界說是為變量定名,而typedef(或稱為類型界說)就是為類型定名。既然都是定名,那就會有許多相似的處所。而變量界說我想年夜家都邑應用,是以類型界說也必定會應用。

類型界說的語法可以歸結為一句話:只需在變量界說後面加上typedef,就成了類型界說。這兒的本來應當是變量的器械,就成了類型。
如,上面的變量界說:
int integer;     //整型變量
int *pointer;   //整型指針變量
int array [5]; //整型數組變量
int *p_array [5]; //整型指針的數組的變量
int (*array_pointer) [5];//整型數組的指針的變量
int function (int param);//函數界說,也可將函數名看做函數的變量
int *function (int param);//依然是函數,但前往值是整型指針
int (*function) (int param);//如今就是指向函數的指針了
若要界說響應類型,即為類型來起名字,就是上面的情勢:
typedef int integer_t;                      //整型類型
typedef int *pointer_t;     //整型指針類型
typedef int array_t [5]; //整型數組類型
typedef int *p_array_t [5];    //整型指針的數組的類型
typedef int (*array_pointer_t) [5]; //整型數組的指針的類型
typedef int function_t (int param);     //函數類型
typedef int *function_t (int param);    //函數類型
typedef int (*function_t) (int param); //指向函數的指針的類型
留意:下面的函數類型在C中能夠會失足,由於C中並沒有函數類型,它的函數變量會主動退步成函數指針;在C++中似乎是可以的。在這裡重要解釋的是情勢上的類似性.
 
typedef的普通情勢為:
typedef   類型     界說名;
在編程中應用typedef目標普通有兩個,一個是給變量一個易記且意義明白的新名字,另外一個是簡化一些比擬龐雜的類型聲明。
其實,在C說話中聲明變量的時刻,有個存儲類型指導符(storage-class-specifier),它包含我們熟習的extern、static、auto、register。在不指定存儲類型指導符的時刻,編譯器會依據商定主動取缺省值。別的,存儲類型指導符的地位也是隨意率性的(但請求在變量名和指針*之前),也就是說以下幾行代碼是等價的:
static const int i;
const static int i;
int const static i;
const int static i;
依據C說話標准,在停止句法剖析的時刻,typedef和存儲類型指導符是等價的!所以,我們把上述應用static的處所調換為typedef:
typedef const int i;
const typedef int i;
int const typedef i;
const int typedef i;
上述代碼的語義是:將i界說為一個類型名,其等價的類型為const int。今後假如我們有i   a代碼,就等價於const int a。關於有指針的處所也是一樣的,好比:
int const typedef *t;那末代碼t   p。就相當於int const *p。
別的,typedef不克不及和static等存儲類型指導符同時應用,由於每一個變量只能有一種存儲類型,所以代碼:typedef static int i;長短法的。
應用typedef簡化龐雜的變量聲明
1)、界說一個有10個指針的數組,該指針指向一個函數,該函數有一個整形參數,並前往一個整型?
第一種辦法:int (*a[10])(int);
第二種辦法:typedef int (*pfunc)(int);
             pfunc a[10];
2)、界說一個有10個指針的數組,該指針指向一個函數,該函數有一個函數指針(不帶參數,前往值為空)參數,並前往空。
第一種辦法:void (*a[10])(void (*)(void));
第二種辦法:typedef void (*pfuncParam)(void);
               typedef void (*pfunc)(pfuncParam);
pfunc a[10];
3)、一個指向有10個函數指針(不帶參數,前往值為double)數組的指針
第一種辦法:double (*)(void) (*p)[10];
第二種辦法:typedef double (*pfunc)(void);
             typedef pfunc (*pfuncParam)[10];
             pfuncParam p;
總結:
typedef有兩種用法:
1、普通情勢,界說已有類型的別號
  typedef   類型    界說名;
2、創立一個新的類型
     typedef   前往值類型   新類型名(參數列表);
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved