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)这两句,非常感谢。麻烦请有一定把握的朋友进来做,如果弄错了,容易误导人。
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)这两句,非常感谢。麻烦请有一定把握的朋友进来做,如果弄错了,容易误导人。
void* pv=(void*)dw;---pv实际上就是等于dw;类型变一下,变成了void *
int* pk=(int*)(*(int*)pv) ----pk变成了指向i的指针了;(*(int*)pv)这个是指向i的指针,前面的(int *)是类型强制转换int k=*pk; ---k=i;也就是1,这句不用解释了
不知道对不对,没有验证!
pv是指针,*(int*)pv是值,这个赋值语句应该是错的~~
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是等效的
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
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是等效的
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;
所以 pk就是指向变量i的,故 *pk就是 i,k也即为1;3、当指针之间pv的强制转化时,只是改指针管辖的字节大小不一样,但都是从pv的值所代表的地址作为起始。
有点失误,
DWORD dw=(DWORD)π 一句执行后 dw为pi的地址void* pv=(void*)dw; 执行后 pv仍然为pi的地址int* pk=(int*)(*(int*)pv); 先看(*(int*)pv)强制转化后*pv就为pi的值,pv就指向变量i的地址了
http://topic.csdn.net/u/20090209/10/1d319e1a-cba9-4255-8ae8-42d55ab76bf8.html
这句就看不懂了 &不是引用吗? 这句表示什么意思?
ey:
int i=10;
int &nCount=i;其他时候应该是取地址
int* pi=&i 是把i在内存中的地址赋值给pi.
就是 DWORD dw=(DWORD)π
会把很多人搞迷糊吧