首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于c++指针和内存地址的有关问题,比较蛋疼

2012-05-22 
关于c++指针和内存地址的问题,比较蛋疼①long n0x004DE99B*(unsigned char *) (n) 3 或者②#define n (0

关于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);
建议用第一种,第二种多了的话,容易宏冲突。
[解决办法]
是一样的.
[解决办法]
第一个的汇编

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类型的。

热点排行