我可以对空指针使用指针算术吗?

时间:2018-09-06 02:53:25

标签: c pointers

我知道您不能对void指针使用指针算术,但是理论上您可以对指向void指针的指针进行指针算术,因为sizeof(void *)会得出一个答案,即指针在系统上占用了多少字节?

2 个答案:

答案 0 :(得分:9)

void*是不完整的对象类型,因此不能在void上使用指针算术。

来自C委员会N1570草案:

  

6.5.6加法运算符
  ...
  2.另外,两个操作数均应为算术类型,或者一个操作数应为指向完整对象类型的指针,而另一个应为整数类型。

但是在void**上允许使用,因为void*不是不完整的对象类型。就像一个指向字符类型的指针。

  

6.2.5类型
  ...
  19. 无效类型包含一组空值; 这是一个不完整的对象类型,无法完成。
  ...
  28. 指向void的指针应具有与相同的表示和对齐要求   指向字符类型的指针

答案 1 :(得分:6)

是的,指针算术适用于指向空指针(void**)的指针。只有void*是特殊的,void**不是特殊的。

示例:

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