+ -
当前位置:首页 → 问答吧 → 关于指针转换

关于指针转换

时间:2011-12-15

来源:互联网

问题见代码
C/C++ code

void TestFunc()
{
    void *ptr;
    int *ptr1 = new int[4];

    int count = 4;
    ptr = ptr1;
    while (count--)
    {
        *(void**)ptr1 = ptr1 + 4; //这行代码具体什么意思,我调试过了,不是改变ptr1的值
        ptr1 = ptr1 + 4;
    }

    ptr = *(void**)ptr; // 这行代码为什么会导致ptr的值加16字节
    ptr = *(void**)ptr;
}

作者: wutaozhao   发布时间: 2011-12-15

*(void**)ptr1 = ptr1 + 4; //这行代码具体什么意思,我调试过了,不是改变ptr1的值
这行的意思是 让ptr1指向的内容的前四个字节赋值为 ptr1 + 4;
相当于 ptr1[0] = (int)(ptr1 + 4);

作者: mingliang1212   发布时间: 2011-12-15

ptr = *(void**)ptr;


===
这行的意思是 ptr = (void*)ptr[0];
因为ptr 本身等于 ptr1;所以实际上就是你上面所改变的 ptr1[0]的值。

作者: mingliang1212   发布时间: 2011-12-15

while (count--)
  {
  *(void**)ptr1 = ptr1 + 4; //ptr1指向ptr1[1]
  ptr1 = ptr1 + 4; //ptr1移动4
  }
这段代码让ptr1构成类似链表的结构,只有指向下一成员的指针,没有数据,而且

作者: Rotaxe   发布时间: 2011-12-15

引用 2 楼 mingliang1212 的回复:
ptr = *(void**)ptr;


===
这行的意思是 ptr = (void*)ptr[0];
因为ptr 本身等于 ptr1;所以实际上就是你上面所改变的 ptr1[0]的值。


失误了点:

ptr = *(void**)ptr;


===
这行的意思是 ptr = (void*)((int*)ptr)[0];//这里
因为ptr 本身等于 ptr1;所以实际上就是你上面所改变的 ptr1[0]的值。

作者: mingliang1212   发布时间: 2011-12-15