操作指定位置的內(nèi)存
首先讓我們看下面一個(gè)例子
int a
=
100;
int *p=&a;
*p=200;
經(jīng)過上面這三條語句之后,變量a的值就從100改為200了,這是很顯然的,因?yàn)?
*p
是解引用指針,其中變量p中存放的是變量a的地址,在這里是
0x0012ff78,
也就是說
*
操作符操作的是一個(gè)地址值,那么我們可以直接用
*
來操作地址值么?
*0x0012ff78 =300;
上面這條語句編譯不過,因?yàn)橹羔樈庖貌僮鞣?/span>
*
之后跟的不是一個(gè)指針類型,而是一個(gè)整型的值,這樣是不行的,要想實(shí)現(xiàn)上面的功能,必須要把該整型值轉(zhuǎn)化成指針類型。
我們可以這樣處理
*(int *)
0x0012ff78=300; //
把整型強(qiáng)制轉(zhuǎn)化成
int
類型的指針
這樣
變量
a
的值就變成
300
了。
其實(shí)上面這種用法在一般的程序設(shè)計(jì)中是很少用的,因?yàn)榫幾g器無法幫助你把某一個(gè)特定的變量放在一個(gè)內(nèi)存中指定的位置,所以無法預(yù)知它的地址。小心使用這種方式不小心有就會(huì)誤操作內(nèi)存中的有用的數(shù)據(jù)。
上面這種用法其實(shí)一般都是用在操作硬件方面,在一些機(jī)器上面,要想與設(shè)備控制器的進(jìn)行通信,就必須通過在某個(gè)特定的內(nèi)存的地址來讀取和寫入值。這些地址是預(yù)先已經(jīng)知道的,其實(shí)這些地址也就是與硬件通信的接口。
?
上面就是操作指定位置的內(nèi)存的方法。
?
此文完。
?
?
?