[問題] void* and void**
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
linux
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
stdlib
問題(Question):
在網路上看到了一個動態宣告二維陣列的方式
大致上已經了解在做甚麼
不過無法理解的是明明a是一個void** 可是function的return type卻是void*
我的想法是void*可以是指向任何型態的指標,所以應該也包括指向指標的指標
不過這樣想的話所有的void**都應該可以用void*來取代阿
不過實際上如果把綠色的部分都改成void* compile不會過
把紅色的改成void**的話compiler會過,但是會出現warning
請問為什麼a是void**,function的return type卻是void*呢?
程式碼(Code):(請善用置底文網頁, 記得排版)
void* malloc2Darray(int h,int w,int size)
{
int i;
void** a = (void**) malloc ( h*sizeof(void*) + h*w*size )
for(i=0;i<h;i++)
a[i] = ((char*)(a+h)) + i*w*size;
return a;
}
補充說明(Supplement):
--
────╮ ╮ ╮╭──┬╭─┬─╯┬── ▲──╮
╭╯ │ ││ │ │ │ 幹!考試讀不完! /\ │
<●╰────┼──┤├──┤ │ ├─★ 不黑特嗎? φ │
/> │ ││ │ │ │ ╭───╮ ● │
/| ╰ ╰╯ ╰ ╰ ╰──╯ ╭╯ ﹀\﹀ │
臣亮言:先帝創業未半,而中道崩殂。今天下... ξwinken2004╰────────/\─╯
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.249.170
推
11/01 01:11, , 1F
11/01 01:11, 1F
→
11/01 08:10, , 2F
11/01 08:10, 2F
→
11/01 11:11, , 3F
11/01 11:11, 3F
在網路上看了幾個資料 回傳型態確實是void*
http://ppt.cc/QL-_ 我後來把後面的所有評論大致瀏覽過後
大概可以理解為啥是void*
其實跟我想得差不多,void*可以是指向任何型態的指標
所以也包括指向指標的指標
至於為啥void**會出現warming,可能是寫compiler的人不希望我們這樣寫吧?
我在猜compiler可能希望function回傳不知道指向甚麼型態的指標的時候
都固定回傳void*,而不是void**或是void***之類的
反正到時候再用cast轉換成(int **)或是(char **)之類的就可以了
我還沒修到compiler就是了...
後來用不同的compiler,return type用void**結果也沒出現warning XD
而且我自己觀察就算有warning程式也可以正確地跑就是了...
雖然不知道會不會哪天爆炸XD
至於把綠色的部分改成void* 應該只是我癡心妄想而已吧XD
有一點把compiler想像成無所不能的東西了
只是抱持著好奇好玩的心情這樣改的
就算可以過我也不敢這樣用XD
※ 編輯: winken2004 來自: 140.113.249.170 (11/01 16:34)
→
11/01 16:45, , 4F
11/01 16:45, 4F
→
11/01 16:46, , 5F
11/01 16:46, 5F
→
11/01 21:17, , 6F
11/01 21:17, 6F
阿 感謝XD
※ 編輯: winken2004 來自: 140.113.249.170 (11/01 22:15)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章