Re: [問題] void* and void**
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;
}
推
11/01 01:11,
11/01 01:11
→
11/01 08:10,
11/01 08:10
→
11/01 11:11,
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
推
11/01 15:55, , 1F
11/01 15:55, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章