我試圖用C這樣做的,它崩潰:我可以在C中使用一個void指針作爲數組嗎?
int nValue=1;
void* asd;
asd[0]=&nValue;
,出現以下錯誤:
*error C2036: 'void**' *: unknown size
error C2100: illegal indirection*
我是否可以使用在C void指針作爲數組?
如果可以,那麼這樣做的正確方法是什麼?
我試圖用C這樣做的,它崩潰:我可以在C中使用一個void指針作爲數組嗎?
int nValue=1;
void* asd;
asd[0]=&nValue;
,出現以下錯誤:
*error C2036: 'void**' *: unknown size
error C2100: illegal indirection*
我是否可以使用在C void指針作爲數組?
如果可以,那麼這樣做的正確方法是什麼?
,你可以這樣寫:
int main()
{
int iv = 4;
char c = 'c';
void *pv[4];
pv[0] = &iv;
pv[1] = &c;
printf("iv =%d, c = %c", *(int *)pv[0], *(char *)pv[1]);
return 0;
}
Can I use a void pointer in C as an array?
不是。你可以轉換爲void*
,但是你不能嘲笑它,當你考慮它時它是有意義的。
它指向一個未知的類型,所以大小也是未知的。因此,您不可能對其執行指針運算(這是asd[0]
所做的),因爲您不知道要從基指針偏移多少個字節,也不知道要寫多少個字節。
在旁註中,asd
(很可能)指向無效內存,因爲它未初始化。寫或讀它會調用未定義的行爲。
確保你聲明'sizeof(void)'是未定義的;-) – oldrinb
'無效*'無法提領,但它可以是任何指針類型之間轉換。話雖如此,你甚至從來沒有在這裏初始化'asd' ... – oldrinb
你是怎麼做到這一點的? – chris
不知道你期望做什麼。如果你聲明爲void * asd [5];' – TJD