C 语言指针的强制装换

#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*)&num;
    #lea         eax,[num]
    #将num 的地址 赋给 eax 寄存器中,
    #mov         dword ptr [m],eax
    #将 eax寄存器中的值付给 双字类型 m  的地址内,
	char *p = (char*)&num;
    #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;
}

猜你喜欢

转载自my.oschina.net/u/1579560/blog/1798747
今日推荐