c - void * 和 void ** 之间的区别

标签 c void-pointers pointer-arithmetic

除了能够取消引用 void** 之外,我不明白以下内容:

void * foo, **bar;
foo++;//error
bar++;//no error

为什么第一个不起作用但第二个却起作用?有什么区别?

最佳答案

第一个片段

 foo++;//error

因为,foo是指向void的指针,并且您不能对void *进行指针算术,即void的大小code> 类型未定义。

第二个片段

 bar++;//no error

因为,bar是一个指向指向void的指针。因此,算术运算是允许的,因为指向指针类型的指针的大小已明确定义。

FWIW,有时不要感到惊讶,void pointer arithmetic "works" without any error .

关于c - void * 和 void ** 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31301515/

相关文章:

c - 如何返回指向 void* 指向的数组中的数组位置的指针?

c++ - 为什么 gmtime 和 localtime 给我相同的结果?

c - 为什么输出反转且第一个字符丢失?

c++ - 从多个文件描述符异步接收 UDP 数据包

c++ - 具有两个不同缓冲区的指针算法

c++ - 是否对未指向序列未定义行为中的元素的指针递增/递减或添加整数值?

c++ - mmap的简明指针算法

c++ - "!!"(否定两次)有什么用?

c++ - glVertexAttribPointer(偏移量?)给出 GL_INVALID_OPERATION

c++ - 我想存储指向函数的空指针及其类型