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**指针递增以指向下一个指针.