注意:我是一名经验丰富的 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
}
最佳答案
void*
是指向某物的指针,但你不知道是什么。因为你不知道它是什么,你不知道它占用了多少空间,所以你不能增加指针。
void**
是一个指向 void*
的指针,所以它是一个指向指针的指针。我们知道空间指针占用了多少空间,因此我们可以递增 void**
指针以指向下一个指针。
关于c++ - void* 和 void** 的心智模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5591994/