看板 C_and_CPP 關於我們 聯絡資訊
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; }
LPH66:我覺得是回傳型態寫錯了...這個回傳型態應該要是 void** 11/01 01:11
shemale:同樓上。原po指標觀念仍不夠清楚,試試畫圖 11/01 08:10
azureblaze:另外void*可以吃大部分的指標,包括void** 11/01 11:11
如果不論配置的過程,從我的角度回傳 void * 並不算錯。 主要原因是這應該是 C,在 C 語言裡面 void * 的主要用途就是泛用型指標 而 void ** 卻不是 [以下以 gcc 為編譯器] 例如: void *p; int **x = p; 在 C 裡面沒有 warning 也沒有 error 在 C++ 裡面是 error 相對而言: void **p; int **x = p; 在 C 裡面是 warning 在 C++ 裡面還是 error 這主要反應了 C 標準與編譯器是可允許 void * 隱性轉型成其他型態指標 但非 void * 指標 (例如 void **) 的轉換採取的是 warning C++ 編譯器則強迫你需要做顯性轉型,否則一律是 error 就這個例子,在 C 裡面你要傳遞一個一定要被轉成其他型態指標的指標時, 個人認為應該是用 void * 比較合宜 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.112.29.148
winken2004:感謝 11/01 15:55