关于c++指针和内存地址的有关问题,比较蛋疼
关于c++指针和内存地址的问题,比较蛋疼
①
long n=0x004DE99B;
*(unsigned char *) (n)= 3 ;
或者
②
#define n (0x004DE99B)
*(unsigned char *) (n)= 3 ;
上面2种写法意义是一样的吗?
是不是①只是把变量N的值从0x004DE99B变为3?
而②是把内存地址0x004DE99B对应的值变为3?
------解决方案--------------------
2种写法,效果基本上等价的(都是把内存地址0x004DE99B对应的1Byte值变为3);
建议用第一种,第二种多了的话,容易宏冲突。
------解决方案--------------------
是一样的.
------解决方案--------------------
第一个的汇编
①
long n=0x004DE99B;
*(unsigned char *) (n)= 3 ;
或者
②
#define n (0x004DE99B)
*(unsigned char *) (n)= 3 ;
上面2种写法意义是一样的吗?
是不是①只是把变量N的值从0x004DE99B变为3?
而②是把内存地址0x004DE99B对应的值变为3?
------解决方案--------------------
2种写法,效果基本上等价的(都是把内存地址0x004DE99B对应的1Byte值变为3);
建议用第一种,第二种多了的话,容易宏冲突。
------解决方案--------------------
是一样的.
------解决方案--------------------
第一个的汇编
- Assembly code
*(unsigned char *) (n)= 3 ; 00411535 mov eax,dword ptr [n] 00411538 mov byte ptr [eax],3
------解决方案--------------------
两种写法都是把“内存地址0x004DE99B对应的值变为3”即你对2的解释,1的解释是错误的。
另外2用到了宏,实质上是:
*(unsigned char *)(0x004DE99B)= 3;
有个小区别是0x004DE99B这个字面量是int类型的。