English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
所有分類

請問 void func() 和 void* func()這兩個函式有什麼不同? 如果我有一個 void* var的變數, 那麼 var = (void*)func()結果會是如何?

2007-07-12 12:10:51 · 2 個解答 · 發問者 志銘 4 in 電腦與網際網路 程式設計

另外, void*是可以當作接受任何型態(例: int*,long*)回傳的意思嗎?

2007-07-12 12:28:02 · update #1

2 個解答

首先 void 表示「無效」或是「無意義」的意思。例如:



#include

int main(int argc, char* argv[])

{

int i,j,k=0;

printf("k=%d\n",k);



(void) i; /*Make compiler happy...*/

(void) j; /*Make compiler happy...*/



return 0;

}



程式碼宣告了 i,j,k 三個變數,但是只有用到 k;編譯器在編譯時會發出警告(Wraning)提醒您未使用到 i 與 j 兩個變數。如果您要排除這些警告,又不想刪去 i 與 j 宣告(可能將來馬上就會撰寫相關程式碼),您可以 (void) i;(void) j; 陳述,告訴編譯器 i 與 j 當下無意義,以排除編譯器警告。



由上述可知 void func() 所指的 void 正是回傳值「無意義」的意思,函數主體內要強制返回時,只需要下達 return; 陳述即可。



而 void* func() 表示回傳指標所指向的內容無意義,其實就是表示指向的記憶體「型態未定」的意思,只知道有個指標指向此處,但是尚且不知道以何種型態規劃。例如:



#include

void* func(int* i, float* f)

{

if(*i > *f) return i; else return f;

}

int main(int argc, char* argv[])

{

int i;

float f;

void* p;



i=1;f=2.0; p=func(&i,&f); /*這裡可以預期 p 會指向 f*/;

/*將 p 轉型成 float 指標,才能將其所指向的記憶體規劃為 float 型態*/

printf("f=%4.4f\n",*((float*) p));



i=2;f=1.0; p=func(&i,&f); /*這裡可以預期 p 會指向 i*/;

/*將 p 轉型成 int 指標,才能將其所指向的記憶體規劃為 int 型態*/

printf("i=%4.4d\n",*((int*) p));



return 0;

}



由上述程式可以窺探,void* 就只是指標,一般化的指標,也就是說任何型態的指標都可以指定給 void 指標變數。而要使用 void 指標取得所指向記憶體內的值,必須透過轉型(也就是明白告訴編譯器,從指向的記憶體位址開始起算,要以多大的「記憶窗框」規劃)方得使用。

2007-07-12 16:46:52 · answer #1 · answered by 淡藍色 5 · 0 0

void 空的,空無所有的

沒有回傳值,要回傳什麼呢

2007-07-12 13:04:09 · answer #2 · answered by ? 3 · 0 0

fedest.com, questions and answers