程序让生活更美好

半亩方塘 天光云影

  C++博客 ::  :: 新随笔 :: 联系 ::  :: 管理 ::
  55 随笔 :: 4 文章 :: 202 评论 :: 0 Trackbacks

操作指定位置的内存

首先让我们看下面一个例子

int a 100;

int *p=&a;

*p=200;

经过上面这三条语句之后,变量a的值就从100改为200了,这是很显然的,因为 *p 是解引用指针,其中变量p中存放的是变量a的地址,在这里是 0x0012ff78, 也就是说 * 操作符操作的是一个地址值,那么我们可以直接用 * 来操作地址值么?

*0x0012ff78 =300;

上面这条语句编译不过,因为指针解引用操作符 * 之后跟的不是一个指针类型,而是一个整型的值,这样是不行的,要想实现上面的功能,必须要把该整型值转化成指针类型。

我们可以这样处理

*(int *) 0x0012ff78=300; // 把整型强制转化成 int 类型的指针

这样 变量 a 的值就变成 300 了。

其实上面这种用法在一般的程序设计中是很少用的,因为编译器无法帮助你把某一个特定的变量放在一个内存中指定的位置,所以无法预知它的地址。小心使用这种方式不小心有就会误操作内存中的有用的数据。

上面这种用法其实一般都是用在操作硬件方面,在一些机器上面,要想与设备控制器的进行通信,就必须通过在某个特定的内存的地址来读取和写入值。这些地址是预先已经知道的,其实这些地址也就是与硬件通信的接口。

 

上面就是操作指定位置的内存的方法。

 

此文完。

 

 

 

posted on 2006-05-25 10:31 北风之神007 阅读(632) 评论(1)  编辑 收藏 引用 所属分类: c/c++

评论

# re: 操作指定位置的内存 2007-04-11 08:43 帅哥
感谢  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理