#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int num=8;
#mov dword ptr [num],8
#汇编说明: 将值8 赋给 双字num的地址内,
int *q=(int*)num;
#mov eax,dword ptr [num]
#汇编说明: 将双字类型 num中的值 赋给 eax 寄存器中,
#mov dword ptr [q],eax
#汇编说明: 将eax寄存器中的值 赋给 双字类型 q 的地址内,
int *m= (int*)#
#lea eax,[num]
#将num 的地址 赋给 eax 寄存器中,
#mov dword ptr [m],eax
#将 eax寄存器中的值付给 双字类型 m 的地址内,
char *p = (char*)#
#lea eax,[num]
#将num 的地址 赋给 eax 寄存器中,
#mov dword ptr [p],eax
#将eax寄存器中的值付给 双字类型 p 的地址中,
/*
汇编说明:
lea 指令传递的是地址.
mov 指令传递的是值.
*/
printf("num: %x\r\n",&num);
printf("p :%x\r\n",p);
printf("*p :%d\r\n",*p); # 这个取地址中的值得操作是失败的,非法访问了一个的地址.
return 0;
}
C 语言指针的强制装换
猜你喜欢
转载自my.oschina.net/u/1579560/blog/1798747
今日推荐
周排行