2012-09-14 61 views
0

我試圖用C這樣做的,它崩潰:我可以在C中使用一個void指針作爲數組嗎?

int nValue=1; 
void* asd; 
asd[0]=&nValue; 

,出現以下錯誤:

*error C2036: 'void**' *: unknown size 
error C2100: illegal indirection* 

我是否可以使用在C void指針作爲數組?

如果可以,那麼這樣做的正確方法是什麼?

+2

'無效*'無法提領,但它可以是任何指針類型之間轉換。話雖如此,你甚至從來沒有在這裏初始化'asd' ... – oldrinb

+0

你是怎麼做到這一點的? – chris

+0

不知道你期望做什麼。如果你聲明爲void * asd [5];' – TJD

回答

0

,你可以這樣寫:

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; 
} 
3

Can I use a void pointer in C as an array?

不是。你可以轉換爲void*,但是你不能嘲笑它,當你考慮它時它是有意義的。

它指向一個未知的類型,所以大小也是未知的。因此,您不可能對其執行指針運算(這是asd[0]所做的),因爲您不知道要從基指針偏移多少個字節,也不知道要寫多少個字節。

在旁註中,asd(很可能)指向無效內存,因爲它未初始化。寫或讀它會調用未定義的行爲。

+0

確保你聲明'sizeof(void)'是未定義的;-) – oldrinb

相關問題