void*和void**的心理模型?

Mar*_* Ba 19 c c++ void-pointers

注意:我是一位经验丰富的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
}
Run Code Online (Sandbox Code Playgroud)

Sim*_*son 33

void*是指向某事物的指针,但你不知道是什么.因为你不知道它是什么,你不知道占用多少空间,所以你不能增加指针.

void**是一个指针void*,所以它是一个指针指针.我们知道空间指针占用了多少空间,因此我们可以将void**指针递增以指向下一个指针.


fre*_*low 7

void*指向一个对象,其类型是未知的编译器.

A void**指向存储这样的a的变量void*.