操作指定位置的内存
首先让我们看下面一个例子
int a
=
100;
int *p=&a;
*p=200;
经过上面这三条语句之后,变量a的值就从100改为200了,这是很显然的,因为
*p
是解引用指针,其中变量p中存放的是变量a的地址,在这里是
0x0012ff78,
也就是说
*
操作符操作的是一个地址值,那么我们可以直接用
*
来操作地址值么?
*0x0012ff78 =300;
上面这条语句编译不过,因为指针解引用操作符
*
之后跟的不是一个指针类型,而是一个整型的值,这样是不行的,要想实现上面的功能,必须要把该整型值转化成指针类型。
我们可以这样处理
*(int *)
0x0012ff78=300; //
把整型强制转化成
int
类型的指针
这样
变量
a
的值就变成
300
了。
其实上面这种用法在一般的程序设计中是很少用的,因为编译器无法帮助你把某一个特定的变量放在一个内存中指定的位置,所以无法预知它的地址。小心使用这种方式不小心有就会误操作内存中的有用的数据。
上面这种用法其实一般都是用在操作硬件方面,在一些机器上面,要想与设备控制器的进行通信,就必须通过在某个特定的内存的地址来读取和写入值。这些地址是预先已经知道的,其实这些地址也就是与硬件通信的接口。
上面就是操作指定位置的内存的方法。
此文完。