[C語言] 指標教學[六] — 1: void pointer

MuLong PuYang
3 min readSep 8, 2019

指標的形式

我們知道指標的形式可以是 int, char, short...等等之類的,但是其實指標的形式也可以是 void,void pointer 的作用其實很大,當我們認為這個變數可以是其他型態的時候,我們可以先將這個變數設定為 void pointer 的型態,然後這個型態可以是 int 啊或者是 char 啊,我會在接下來的系列來一一講解 void pointer 好用的地方,這一章我先講解 void pointer 的一個簡單的形式

假設我們有一個程式,這個程式宣告了一個整數變數 a ,我們想要用一個指標變數來指這個變數 a

我們可以創立一個 void pointer, *void_ptr 來指向這個變數 a ,然後再用 printf 把它印出來

當然我們實際去跑這個檔案的話會得到錯誤的訊息,因為我們需要將它轉成 int 的型態

void_pointer_explanation_1_2.c: In function ‘main’:
void_pointer_explanation_1_2.c:8:20: warning: dereferencing ‘void *’ pointer
printf("%d\n", *p);
^~
void_pointer_explanation_1_2.c:8:20: error: invalid use of void expression

所以我們將 void_ptr 改寫成 (int *)void_ptr,記住這是第一步,將 void_ptr 改寫成 int pointer 的型態,但是這只是將指標改成整數型態而已,如果我們要指標的數值,記得還要再加上一個星號 * ,也就是 *(int *)void_ptr ,這樣才能將指標的數值抽取出來

結果

10

那如果我們想說在讓這個 void pointer 去指其他的變數,那當然也是可以,首先我們宣告了另外一個 char 變數 b 為 20,並用 void_ptr 改指這個變數再印出來

結果

10
20

看到這裡,我想很多讀者會發現 void pointer 是一種很有彈性的作法,我們可以用它去指不同的變數,再把它還原回來,這個作法其實可以用在不確定要傳入型態是什麼函數參數中,同樣的也可以回傳值中,如果我們不確定要傳來的是什麼樣的資料型態,也不確定回傳是怎樣的資料型態,可以用 void pointer 的方式,來使用適當的方法處理變數

相關連結

--

--