C++ typedef與#define
一、define
#define說(shuō)白了就是一個(gè)文本替換工具,是預(yù)處理器完成的,就是在預(yù)處理的時(shí)候把一段文本換成另一段文本。
舉個(gè)例子:
#define NUM 999
這里就定義了一個(gè)NUM,NUM就是999;當(dāng)你使用它時(shí),如if(i<NUM){};編譯器在處理這個(gè)代碼之前,預(yù)處理器已經(jīng)把NUM替換成了999,所以上面代碼就相當(dāng)于if(i<999){}。如果這個(gè)NUM用的地方比較多,還經(jīng)常需要修改,那么#define就比較方便了。當(dāng)然你也可以使用int類型的變量實(shí)現(xiàn)上面的功能,但是這樣會(huì)限定類型。
二、typedef
任何聲明變量的語(yǔ)句前面加上typedef之后,原來(lái)是變量的都變成一種類型。不管這個(gè)聲明中的標(biāo)識(shí)符號(hào)出現(xiàn)在中間還是最后。
例:
復(fù)雜一些的就需要“左右法則”了
分析一下定義:int (*arr[10]) (int);
? ? ? ?找到變量名arr,先往右是[]運(yùn)算符,說(shuō)明arr是一個(gè)數(shù)組;再往左是一個(gè)*號(hào),說(shuō)明arr數(shù)組的元素是指針(注意:這里的*修飾的不是arr,而是arr[10]。原因是[]運(yùn)算符的優(yōu)先級(jí)比*要高,arr先與[]結(jié)合。);跳出圓括號(hào),先往右又遇到圓括號(hào),說(shuō)明arr數(shù)組的元素是指向函數(shù)的指針,它指向的函數(shù)有一個(gè)int類型的參數(shù),返回值類型是int。
當(dāng)然還有更復(fù)雜的,只要你把他拆解開(kāi),一個(gè)個(gè)分析,也就沒(méi)什么難的了!