c++ - void* 和 void** 的心智模型?

标签 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
}

最佳答案

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

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

关于c++ - void* 和 void** 的心智模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5591994/

相关文章:

c - 从字符串打印字符值时出错

c++ - 根据数据转换 void 指针 (C++)

c - 将 void* 变量分配给结构变量

c++ - 创建一定大小的文件

c++ - STL 算法和迭代器代替 "for"循环

c++ - 如何用断言做一些有用的事情?

c++ - 如何找到继承类的分配地址

c - Strcpy 将结构名称复制到 char 数组?

c - 将字符分配给 char[x] 会导致段错误

c# - 将代码从 C++ 包装到 C# 时的内存管理