大家都知道對於一般的指標,比如int*等,其加減運算是以元素的大小為單位的。
unsigned int *s = (unsigned int*)0x1234;
cout << s+1 << endl;
cout << s-1 << endl;
其結果分別是:0x1238, 0x1230
分別加減了乙個unsigned int的大小,也就是4個位元組。
但是當指標型別為void*時,其加減運算與普通整數沒有區別:
void *s = (void*)0x1234;
cout << s+1 << endl;
cout << s-1 << endl;
結果為:0x1235, 0x1233 ,像整數一樣,只加減了一。
出現這種問題,應該是因為void* 型別的指標是一種泛型的指標(可指向任意型別的元素),編譯器無法推導出其指向的元素型別,自然也就不能作與型別有關的運算(加或減去乙個型別的大小來指向下乙個元素)。
而對於int*型別的指標,編譯器知道它是指向int型別資料的,其加減運算就可以int型別資料的大小為單位。
測試程式:
測試結果:
測試環境為:
g++ (ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0
指標加減運算
include include 字元陣列 指標是4位元組 指標 指標 錯誤 指標之間相加無限大,記憶體崩潰,所以指標 指標是不可能 指標 指標 得到之間間隔的單元個數。1 算出間隔的位元組數,2 除以調整的權重 int main x 可以設arr的起始位址是x int p arr 1 x 4 指標是...
指標的「加 減」 運算,指標儲存(c語言)
int a 10 定義乙個整型變數a,並將10賦值給a int p a 定義乙個整型指標變數p,並將a的位址賦值給p p int 1000 將 int 1000強轉為整型指標 int 並賦值給p 在c語言中,記憶體可以理解為乙個字元陣列,基本單位是位元組,每個位元組包含乙個位址,而位址是由cpu的位...
加減運算 加減法運算的尾數法
在數量關係中,涉及到整數的乘法和加減法,可以考慮尾數 在資料分析中,凡是涉及到數的加減運算,可以考慮尾數法,即便不是整數間的加減法,尾數法也有參考價值。比如123.1 45.6,尾數大概率是7,小概率6或者8,而不可能是其餘的數字。為什麼可能是6或者8呢?因為1和6可能是四捨五入得來的。1的精確值是...