一个指针强制转换问题,用户具备直接操作地址的权限么。,, ? 大家帮忙看看

[复制链接]
查看11 | 回复2 | 2010-10-22 20:13:02 | 显示全部楼层 |阅读模式
1 如果在0X30地址处, 存了一个数: charb = 55;
然后做这样一个动作,
char *q ;q = (char *)0x30;

void display(vodi){----}
这样 *q = 55 对不对?我能把0x30地址处的值55显示出来吗, 用户具备直接操作地址的权限么。,,

2 (char *)0x30; 可以读做地址0x30被强制转换成一个指向字符型的指针, 那它是不是也相当一个指针变量的功能 了里面只能存地址了, 如0x30里原先就有数据怎么办?
那换一个实际的内在地址呢,我是举一个例子,谢谢你。

回复

使用道具 举报

千问 | 2010-10-22 20:13:02 | 显示全部楼层
不能。你可以这么运行试试,程序会崩溃掉。0x30不是一个实际的内存地址。在你的程序运行以后,操作系统会为你的进程分配的一个虚拟内存空间。0x30其实指向的是虚拟内存空间。因为你并没有在0x30上实际申请过内存,所以当你直接往0x30写数据的时候,操作系统会发现这个地址没办法转换成实际的内存地址,所以程序会崩溃。崩溃信息应该是:内存地址0x00000030不能read。相信你之前肯定也看到过其他软件报这个错,原理是一样的。。 补充回答:如果你往一个实际存在的虚存地址写东西,要看情况。在你的例子里,如果往b的地址写东西,会改写b的值。b仍然有效,只是值会被改掉。内存地址里存放的数据具体是什么完全取决于你怎么使用它。比如0x30,你既可以认为
回复

使用道具 举报

千问 | 2010-10-22 20:13:02 | 显示全部楼层
1.*q不一定等于55,因为0x30地址的后面不一定是0x00,所以*q肯定是取到出现0x00为止的地方。2.(char *)0x30这是常量,不是变量。如果你向此地址做写操作,原内容会被改写。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行