話說,因為看不懂前人寫的程式碼,上網查了一下說明.....
也才真正地瞭解 typedef 與 #define 的不同....真是不求甚解丫.....Orz
為了加強印象,增加這個網誌分類....
一來加強理解;二來也算是註記分享
=================================================
為了節省閱讀時間,如果看得懂下面的範例....
基本上,再看下去是沒意義的,因為接下來也只是解釋而已....
Ex 1.
typedef int Alias1[10];
typedef void (*Alias2)(void);
看懂了嗎!?看不懂沒關係,再花點時間繼續看下去囉....
讓我們先來看下面的例子....
typedef int Alias1
main() {
Alias1 PI;
PI = 3.14; }
我們可以把 typedef int Alias1 改寫成 #define Alias1 int
坊間書籍,常以這樣的方式來解釋 typedef
確實,用這樣的方式說明,兩者是相通的....
但是,這樣的說明並無法說明兩者的差異性甚至還造成了混淆
把 #define 的思維套用在 typedef(像我就是.....T^T)
相信有許多人跟我一樣會把 int 與 Alias1 拆開來看....
* int 是一組;Alias1是一組 *
* typedef int Alias1[10];
也就是有了這樣的思維,便無法理解 Ex 1. 而誤以為....
int 要替換成 Alias1[10];void 置換成 (*p)(void)
但是,這樣的敘述似乎又不是合法的,因此陷入迷惑中....
實際上,我們必需把 typedef 視為一個整體的敘述....
在Ex 1. 中的第一個小例子是說明 Alias1代表一個,具有連續10個 int 型態的資料別名....
也就是說,我們可以把Alias1視為一個一維陣列、大小是10個 int,這樣的資料型態用Alias1去稱呼它
在我們的程式碼中,如果我們常常需要使用到這樣的資料型態
我們就可以使用 typedef 去宣告,這麼一個資料型態別名,可以幫助我們去理解程式碼....
同樣的,在Ex 1.中的第二個小例子,也是相同意義只是這個資料型態是一項函式
最後,舉個例子來說明加深彼此的理解吧....
Ex 2.
#include "stdafx.h"
typedef typedef int Alias1[10];
main() {
int A1[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
Alias1 A2;
for(int i = 0; i <>
using namespace std;
typedef void (* Alias2)(void);
void functionA(void) { cout << "This class A" << endl; }
void functionB(void) { cout << "This class B" << endl; }
int main(int argc, char* argv[]) {
Alias2 pfunction;
pfunction = functionA;
pfunction();
pfunction = functionB;
pfunction();
return 0; }
沒有留言:
張貼留言