int i=1;
int* pi=&i;
DWORD dw=(DWORD)π
void* pv=(void*)dw;
int* pk=(int*)(*(int*)pv)
int k=*pk; 上面就是代码,想问下最后K的值是什么,另外希望懂的朋友给每行的代码过程都解释一下,特别是void* pv=(void*)dw,int* pk=(int*)(*(int*)pv)这两句,非常感谢。麻烦请有一定把握的朋友进来做,如果弄错了,容易误导人。

解决方案 »

  1.   

    int* pi=&i; ----pi是指向i的指针DWORD dw=(DWORD)π ---dw是指向pi的指针,也就是dw是指向i的指针的指针
    void* pv=(void*)dw;---pv实际上就是等于dw;类型变一下,变成了void *
    int* pk=(int*)(*(int*)pv) ----pk变成了指向i的指针了;(*(int*)pv)这个是指向i的指针,前面的(int *)是类型强制转换int k=*pk; ---k=i;也就是1,这句不用解释了
    不知道对不对,没有验证!
      

  2.   

    int* pk=(int*)(*(int*)pv)这句咋感觉不对呀~~
    pv是指针,*(int*)pv是值,这个赋值语句应该是错的~~
      

  3.   

    int i=1; 
    int* pi=&i;                  pi->i
    DWORD dw=(DWORD)π         dw->pi->i
    void* pv=(void*)dw;          pv = dw->pi->i
    int* pk=(int*)(*(int*)pv)    pk->(*pv), *pv = pi  所以 pk->pi
    int k=*pk;                   k = pi;所以k与pi是等效的
      

  4.   

    int i=1;
    int* pi=&i;      // pi指针指向i
    DWORD dw=(DWORD)π  //pi的地址转换成DWORD 给dw
    void* pv=(void*)dw;   //dw值给指针pv,类似于pv指向i,但pv是void*
    int* pk=(int*)(*(int*)pv)  //转为int*, 取内容,再用int的指针pk指向i
    int k=*pk;            //k去pk所指的值 k = 1
      

  5.   

    int i=1; 
    int* pi=&i;                  pi->i 
    DWORD dw=(DWORD)π        dw->pi->i 
    void* pv=(void*)dw;          pv = dw->pi->i 
    int* pk=(int*)(*(int*)pv)    pk=(*pv), *pv = pi  所以 pk=pi 
    int k=*pk;                  k = i; 
    所以k与i是等效的
      

  6.   

    人疯了。int i=1;                        //32位系统下的解释,int和Dword都是32位,指针为32位
    int* pi=&i;                     //pi指向i
    DWORD dw=(DWORD)π            //dw为pi的地址
    void* pv=(void*)dw;             //将dw的值转为指针,*dw = pi,->,*pv=pi
    int* pk=(int*)(*(int*)pv)       //*(int*)pv显然就是pi的值。(int*)强制转换为int指针,pk=*pv=pi
    int k=*pk;                      //pk==pi,所以k=*pi = 1;
      

  7.   

    1、上边的几次赋值的过程中pi、dw、pv、pk他们的值实际都是一样的,均为int i=1;中变量i的地址,故pk的值仍然为变量i的地址。2、在几次赋值的过程中,只是类型的转化;要知道k的值,只需要看int* pk=(int*)(*(int*)pv)一句,pk是指向int型的指针,且值就为变量int i的地址
        所以 pk就是指向变量i的,故 *pk就是 i,k也即为1;3、当指针之间pv的强制转化时,只是改指针管辖的字节大小不一样,但都是从pv的值所代表的地址作为起始。
      

  8.   

    11楼补充
        有点失误,
    DWORD dw=(DWORD)π 一句执行后 dw为pi的地址void* pv=(void*)dw; 执行后 pv仍然为pi的地址int* pk=(int*)(*(int*)pv); 先看(*(int*)pv)强制转化后*pv就为pi的值,pv就指向变量i的地址了
       
      

  9.   

    k = 1,你看下这个帖子的内容就知道了,弄懂了指针一点不可怕。
    http://topic.csdn.net/u/20090209/10/1d319e1a-cba9-4255-8ae8-42d55ab76bf8.html
      

  10.   

    int* pi=&i; ----pi是指向i的指针 
    这句就看不懂了 &不是引用吗? 这句表示什么意思?
      

  11.   

    只有在定义变量的时候 &才表示引用
    ey: 
    int i=10;
    int &nCount=i;其他时候应该是取地址
    int* pi=&i 是把i在内存中的地址赋值给pi.
      

  12.   

    ^_^ 还好能看懂~~
    就是 DWORD dw=(DWORD)π
    会把很多人搞迷糊吧