注意:我是一个经验丰富的C++程序员,所以我不需要任何指针基础。只是我从来没有和void**合作过,很难让我的心理模型适应void*和void**。我希望有人能用一种很好的方式来解释这一点,这样我就能更容易地记住语义。
考虑以下代码:(使用例如VC++ 2005进行编译)
int main() {
int obj = 42;
void* ptr_to_obj = &obj;
void* addr_of_ptr_to_obj = &ptr_to_obj;
void** ptr_to_ptr_to_obj = &ptr_to_obj;
void* another_addr = ptr_to_ptr_to_obj[0];
// another_addr+1; // not allowed : 'void*' unknown size
ptr_to_ptr_to_obj+1; // allowed
}发布于 2011-04-08 07:45:26
void*是指向某些事物的指针,但您不知道是什么。因为你不知道它是什么,你不知道它占用了多少空间,所以你不能增加指针。
void**是指向void*的指针,所以它是指向指针的指针。我们知道指针占用了多少空间,所以我们可以增加void**指针来指向下一个指针。
发布于 2011-04-08 07:45:15
void*指向编译器未知类型的对象。
void**指向存储这样一个void*的变量。
发布于 2011-04-08 07:45:49
void *可以指向任何东西(函数除外)。所以它甚至可以指向指针,甚至可以指向其他void *对象。
void **是指向void *的指针,因此只能用于指向void *对象.
https://stackoverflow.com/questions/5591994
复制相似问题