C typedef使用四則

2022-09-20 06:18:11 字數 1636 閱讀 3050

'''c++

typedef char* pchar;

pchar a, b;

''''''c++

typedef struct tagpoint

point;

point p1;

'''用'typedef'來定義與平台無關的型別。

比如定義乙個叫'real'的浮點型別,在目標平台一上,讓它表示最高精度的型別為:

'typedef long double real;'

在不支援'long double'的平台二上,改為:

'typedef double real;'

在連 double 都不支援的平台三上,改為:

'typedef float real; '

也就是說,當跨平台時,只要改下'typedef'本身就行,不用對其他原始碼做任何修改。

標準庫就廣泛使用了這個技巧,比如'size_t'。

原宣告:'int (a[5])(int, char);'

變數名為'a',直接用乙個新別名'pfun'替換a就可以了:

'typedef int (pfun)(int, char);'

原宣告的最簡化版:

'pfun a[5];'

原宣告:'void (b[10]) (void ()());'

變數名為'b',先替換右邊部分括號裡的,'pfunparam'為別名一:

'typedef void (pfunparam)();'

再替換左邊的變數'b','pfunx'為別名二:

'typedef void (pfunx)(pfunparam);'

原宣告的最簡化版:

'pfunx b[10];'

原宣告:'doube()() (e)[9]; '

變數名為e,先替換左邊部分,'pfuny'為別名一:

'typedef double(pfuny)();'

再替換右邊的變數e,'pfunparamy'為別名二

'typedef pfuny (pfunparamy)[9];'

原宣告的最簡化版:

'pfunparamy e;'

理解複雜宣告可用的「右左法則」:

從變數名看起,先往右,再往左,碰到乙個圓括號就調轉閱讀的方向;括號內分析完就跳出括號,還是按先右後左的順序,如此迴圈,直到整個宣告分析完。舉例:

'int (func)(int p);'

首先找到變數名func,外面有一對圓括號,而且左邊是乙個號,這說明func是乙個指標;然後跳出這個圓括號,先看右邊,又遇到圓括號,這說明(func)是乙個函式,所以func是乙個指向這類函式的指標,即函式指標,這類函式具有int型別的形參,返回值型別是int。

'int (func[5])(int );'

'func'右邊是乙個''運算子,說明'func'是具有5個元素的陣列;'func'的左邊有乙個'',說明'func'的元素是指標(注意這裡的''不是修飾'func',而是修飾'func[5]'的,原因是''運算子優先順序比''高,'func'先跟''結合)。跳出這個括號,看右邊,又遇到圓括號,說明'func'陣列的元素是函式型別的指標,它指向的函式具有'int*'型別的形參,返回值型別為'int'。

也可以記住2個模式:

'type ()(....)'函式指標

'type ()'陣列指標

mac使用技巧四則

雖然mac不如ubuntu感覺open,但是系統感覺還是挺好用的.用了小半年了,積累了幾個不可缺少的經驗,記錄一下 因為頭兩周用的時候又忘記了.1.修改機器名 mac安裝完成以後會預設將你的機器設成 rainbird s macbook pro 之類的名字.這個本身看著就不爽,如果這台機器是別人先用...

指標運算四則

要是看c語言的書,上面一定會說指標運算僅對陣列有意義,這話似乎也不錯,當然如果你打算對計算機系統徹底研究就不能拘泥於陣列中的指標運算了。下面我們來看看幾個例子。定義乙個指標,然它指向記憶體中的0x10000000位置。void ptr void 0x10000000 然後對它賦值 這樣嗎?ptr 1...

python四則運算程式 四則運算(Python)

四則運算程式 一 資訊 二.題目要求 寫乙個能自動生成小學四則運算題目的程式,然後在此基礎上擴充套件 除了整數以外,還要支援真分數的四則運算,例如 1 6 1 8 7 24 程式要求能處理使用者的輸入,判斷對錯,累積分數 程式支援可以由使用者自行選擇加 減 乘 除運算 三 import random...