如何将void * pointer1赋给void * pointer2?面临一些问题

时间:2010-03-22 15:11:13

标签: c memory pointers

void* ptr1 = NULL;
void* ptr2 = ptr1;
unsigned int *buf = data;//some buffer

//now
ptr2 = buf + 8;

ptr2地址的上述变化未反映在ptr1中。 我也在尝试void* ptr2 = &ptr1;

请告诉我这里的错误。

5 个答案:

答案 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)

指针指向到对象。更改指针意味着将其指向其他位置。它不会改变指向的对象,也不会影响指向该对象的任何其他指针。

在这里,您有ptr1ptr2这些是独立变量,每个变量都包含一个指针值。如果你想要改变一个被反映在另一个上,那么你实际上不需要两个独立的变量,你只想要一个,并多次使用它。

答案 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)

这就是:

This is what happens

答案 4 :(得分:2)

您必须手动更新ptr1 - 这是一个与ptr2完全无关的变量,它们会独立更改值。