簡體   English   中英

我可以在指針上使用指針算法來void指針嗎?

[英]Can I use pointer arithmetic on pointers to void pointers?

我知道你不能在void指針上使用指針算法,但理論上你可以對指向void指針的指針進行指針運算,因為sizeof(void *)會產生指針在你的系統上占用多少字節的答案?

void*上不允許使用指針算法,因為void是一個不完整的對象類型。

來自C委員會草案N1570:

6.5.6加法運算符
...
2.另外,兩個操作數都應具有算術類型,或者一個操作數應是指向完整對象類型的指針另一個操作數應具有整數類型。

但它在void**上是允許的,因為void*不是一個不完整的對象類型。 它就像一個指向字符類型的指針。

6.2.5類型
...
19. void類型包含一組空值; 它是一個不完整的對象類型 ,無法完成。
...
28. 指向void的指針應具有與指向字符類型的指針相同的表示和對齊要求。

是的,指針算法適用於指向void指針的指針( void** )。 只有void*是特殊的, void**不是。

例:

void *arrayOfVoidPtr[10];
void **second = &arrayOfVoidPtr[1];
void **fifth = second + 3; // pointer arithmetic

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM