上篇博客已經說過 typeof 和 __typeof 和 __typeof 功能是同樣的,區別就是不一樣C版本下的不一樣寫法。spa
typeof( ) 會自動推導後面 ( ) 裏的表達式 的 數據類型。 ( )裏能夠是任意類型指針
int a = 6; typeof(int *) p = &a; //定義一個指針型變量p 指向 a
如上代碼,typeof 推斷出後面 ( )裏面的int * 的類型,而後用這個類型int * 定義一個指針變量p。這裏好象有點傻b。 int * 一看就知道是指向int類型的指針類型,這尼瑪還須要typeof推斷嗎? 確實,這樣作有點畫蛇添足。 可是,若是咱們把剛纔的 typeof(int *) 改爲 typeof(&a),它也會自動推導出 &a 的類型 —— int * 型,這樣的話,當遇到一個很是複雜的表達式咱們很難推斷其類型的時候,typeof 就頗有用了。code
再看一個例子:博客
int *p = NULL; typeof(*p) x = 9;
定義了一個指向int類型的指針變量 p,typeof 後面括號裏的表達式爲 *p,p 的類型爲 int * 型,那 *p 固然就被解析爲 int 型,因此用這個類型聲明的變量 x 也是 int 型,就至關於 int x = 9;class