[C語言] 指標教學[六] — 4: 函數回傳形式與參數型態皆為 void pointer

MuLong PuYang
4 min readDec 22, 2019

我們之前已經在以下兩篇學到了參數形式與回傳形式都是 void pointer的情況,現在我們把這兩種強況給合併在一起

傳入回傳皆為 void pointer

如下的 func 函數,回傳型態是 void *,而輸入參數為 void *void_ptr

傳入的型態為整數指標

我們現在讓傳入的數值為整數指標

首先我們宣告了 int a =10 ,接著將這個變數傳入 func 函數中,也就是 func(&a),傳入到函數之後,因為回傳值也是 void pointer,所以我們可以直接把參數回傳

回傳之後我們看到主程式,我們想把這個 void pointer 印出來,b = ((int *)func(&a));

輸出結果

value: 10

傳入的型態為字元陣列

這裡一樣我們先宣告了一個字元陣列 a ,其數值是 test

char a[30] = "test";

接著一樣我們傳入後可以直接回傳

將回傳的 void pointer 轉化成 char pointer的型態,接著就可以印出來數值了

b = ((char *)func(a));printf("string: %s\n", b);

傳入的型態為結構指標

這裡我們先宣告了一個名為 data_t 的結構

typedef struct {
int a;
}data_t;

然後宣告了一個 data1 傳入函數當中,並同時也宣告了一個 *data _ptr 來接收回傳的 void pointer

data_t data1;
data_t *data_ptr;
data_ptr = ((data_t *)func(&data1));

我們在函數中,先將 void pointer 轉化成 data_t 的型態,然後在給予 10 這個數值,接著把這個 void pointer 回傳

void *func(void *void_ptr)
{
((data_t *)void_ptr)->a = 10;
return void_ptr;
}

最後 data_ptr 接收了這個變數,我們把數值印出來即可得到數值為 10

data_ptr = ((data_t *)func(&data1));printf("value: %d\n", data_ptr->a);
value: 10

相關連結

--

--