博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

黑与白的世界

如果人们按照程序员编程的方式修建房屋,那么一只啄木鸟就能毁灭整个文明
dongj.cublog.cn


一段有意思的指针代码

#include <iostream>

using namespace std;

int a = 5;

int main() {
    int* ap = (int*)4681152;
    *ap = 8;
    cout<<(int)&a<<endl;
    cout<<a<<endl;
    return 0;
}

输出结果为:4681152和8,也就是说a的被指针ap改变了。

其实4681152正是变量a的内存地址,和指针ap的指针值相同。这样指针ap就改变变量a的值。

注:该程序不可移植,运行结果不可重复。因为a的内存地址可能改变,这样就得调整。

 

值得一提的是,赋给ap的内存值在[4681152-3, 4681152+3]都将影响变量a的值

例如,将4681152改成4681153,这时a的值变成了2053,化成十六进制为0805H。原因如下:

内存中的数值是按照高位存储在高地址,地位存储在低地址,比如将12345678H存储到内存中,变为78563412H(注意是按字节为单位的)。因此int a = 5;将在内存中存储为05000000H(内存地址从4681152至4681156),在调用int* ap = (int*)4681153;*ap = 8;后从4681153至4681157的内存地址存储的值变成08000000H。至此内存地址从4681152至4681156存储的内容变成了05080000H,也就是我们认为的00000805H,即十进制中的2053。

 TAG 指针
发表于: 2008-03-27 ,修改于: 2008-03-27 13:48,已浏览184次,有评论0条 推荐 投诉


网友评论

发表评论