指標的偏移

2021-10-07 16:50:58 字數 732 閱讀 9729

//方便演示,先初始化乙個指標為空。

int* a = nullptr;

a = a+1;//+1就偏移乙個單位,而a定義的是指向int型資料的指標,int型有4個位元組,所以輸出就是00000004

//假設我們定義乙個一維陣列

int arr[5]=;

int* p= &arr[0];//這裡也可以直接寫成arr

p = p+1;//相當於p = &arr[0+1]

*p; //所以*p = 2;

/*如果我們再定義乙個指標

因為前面的p已經指向了arr[1],為了達到更好的演示效果, 

就讓p1指向不同的位址

*/int* p1=&arr[2];

/*根據前面的我們很明顯可以看出

**p1也就是&arr[2]是可以看做&arr[1]+1的**

而&arr[1]又是等於p的,故p1=p+1,所以結果顯而易見

*/p1-p;

在project的介紹中說了,指標偏移乙個單位,單位的大小由指向的資料大小決定。

所以我們陣列指標的偏移就需要注意,要看指標指向的這個陣列的大小。

//取整個陣列的位址,也就是用這個陣列的首位址初始化指標,

int* p2=&arr;//在數值上,&arr與&arr[0]一樣,但意義不懂,所以不相等。

p2+1;//這此偏移的乙個單位就要看arr的大小了,上文定義的大小為5,裡面的資料型別都是int型,所以整個陣列所佔位元組數為20

二級指標的偏移

假如讓每個指標指向商品資訊,排序比較時,我們比較實際商品資訊,但交換的是指標,這樣交換成本極大降低,這種思想稱為索引式排序。指標陣列 儲存了多個指標的陣列 char p 5 sizeof 為5sizeof char 20 陣列指標 指向一維陣列的指標,char p 5 sizeof 為4 inclu...

指標偏移量的理解

今天刷題的時候碰到如下的一道題 int main array 19 2019 unsigned long offset unsigned long short array 2019 unsigned long array unsigned char array 19 cout offset 以上程式...

二級指標偏移

include void test fuc int b 3 int main void test fuc a printf a 2 1 d n a 2 1 return0 輸出 陣列當做函式引數的時候,會退化成指標,但是只退化一次,int b 3 作為引數會變成 b 3 b是乙個指標,指向乙個陣列,...