为了学习c 的指针,小弟我的代码不正确,请汇编高手分析一下代码到底做了些什么事

为了学习c 的指针,我的代码不正确,请汇编高手分析一下代码到底做了些什么事?
int a = 1,b=2,c=3;
int* p;
int iDif = (int)&c - (int)&p;
memcpy(&p+iDif,&b,4);//结果c的值没有变成2
  memcpy(&c,&b,4);//结果c的值变成了2,但分明&p+iDif就是&c。



------解决方案--------------------
15: memcpy(&p+idif,&b,4);
00401288 push 4
0040128A lea edx,[ebp-8]
0040128D push edx
0040128E mov eax,dword ptr [ebp-14h]
00401291 lea ecx,[ebp+eax*4-10h]
00401295 push ecx
00401296 call memcpy (00401540)

00401291 lea ecx,[ebp+eax*4-10h] <----------

这里编译器解释和你想的完全不同,这时eax==idif==4,
你的想法是 lea ecx,[ebp+eax-10h],它从字面上"等价"于(&p+iDif)

但编译器作了一个指针类型长度的附加动作 * 4 ,结果自然跑飞。