void* ptr1 = NULL;
void* ptr2 = ptr1;
unsigned int *buf = data;//some buffer
//now
ptr2 = buf + 8;
ptr2地址的上述变化未反映在ptr1中。
我也在尝试void* ptr2 = &ptr1;
。
请告诉我这里的错误。
答案 0 :(得分:7)
为什么ptr1会跟随ptr2?
如果您希望ptr1与ptr2具有相同的地址,那么您可以将其设置为ptr2:
ptr1 = ptr2;
在你的帖子中,ptr1仍然指向NULL。所以你需要明确告诉它指向ptr2。
绘制图片会让它变得更加清晰,所以去吧:
alt text http://img705.imageshack.us/img705/2433/pointers.png
现在你有2个指针指向某些数据或没有数据(NULL)。如果你想要一个指针跟随另一个指针,你需要一个指向指针(2个星号)的指针而不仅仅是一个指针(1个星号)。
void** ptr1 = (void**) &ptr2;
答案 1 :(得分:4)
指针指向到对象。更改指针意味着将其指向其他位置。它不会改变指向的对象,也不会影响指向该对象的任何其他指针。
在这里,您有ptr1
和ptr2
这些是独立变量,每个变量都包含一个指针值。如果你想要改变一个被反映在另一个上,那么你实际上不需要两个独立的变量,你只想要一个,并多次使用它。
答案 2 :(得分:4)
如果你想让ptr1跟随ptr2:
void* ptr2 = NULL;
void** ptr1 = (void **)&ptr2;
unsigned int *buf = data;//some buffer
//now
ptr2 = buf + 8;
现在* ptr1跟随ptr2
答案 3 :(得分:4)
这就是:
答案 4 :(得分:2)
您必须手动更新ptr1
- 这是一个与ptr2
完全无关的变量,它们会独立更改值。