關於在標準c中的(void*)作為傳遞引數和返回型別的問題
(void )可以被看成乙個泛型,泛型的意思就是說我們可以向其中傳遞任何型別的資料,可以在執行時為其動態指派特定的型別。在(void)被作為乙個引數的時候,在呼叫該函式的時候可以向其中傳遞任意型別的引數(注意:引數必須是指標型別的變數)。從這一點上來看它的功能比較類似c++中的模板。
不過若是將void*賦值給其他型別的引數,那麼需要進行型別轉換。
從語法上來說,(void*)是乙個空指標型別,他不指向任何型別,僅僅是個位址而已,所以它不能進行自加或者自減運算
int a=1;
p=&a; //正確;
a=(int *)p //正確;
如果(void*)作為乙個函式的返回值,那麼可以將它認為它可以返回任意型別的指標。同樣的,在呼叫函式中我們也應該定義乙個void型別的指標用於接受void型別的返回值,同理,在使用它或者輸出它時,要將其轉化為對應型別的指標才可以使用。以下是乙個簡短的例子。
#include void number1(void *a)
void string(void *s)
void *number(void *a)
void main()
相信這個例子已經足夠的詳細了。 C 零散知識
全域性變數的初始化時機 c 是在編譯期初始化,c 是在程式執行時,main 函式之前初始化.不使用中間變數實現 strlen int mystrlen const char str c 語言函式引數入棧順序為從右至左。具體原因為 c 方式引數入棧順序 從右至左 的好處就是可以動態變化引數個數。通過棧...
C 零散筆記
關於控制項 控制項實質就是乙個類 屬性中的name就是它例項後的變數名 屬性中的其他東西就是類中的變數或函式 例如 可以直接通過name.backcolor color.yellow 來直接操作控制項的背景顏色 color類 裡面封裝的大量的顏色變數 r,g,b 通過color.blue呼叫 col...
零散的C筆記
如何表達陣列型別 如何表達函式指標 c 編譯器如何管理兩函式之間變數的關係?如果定義了乙個.cpp,然後再改為.c可能會出現問題,找不到main函式 指標變數和它所指向的記憶體空間變數是兩個不同的概念 指標指向誰,就把誰的位址賦給指標變數 記憶體四區概念 主調函式 main等 呼叫被調函式 1.ma...