指標的算術運算

2021-09-11 05:33:03 字數 1247 閱讀 2412

指標的算術運算

指標二點算術運算分為兩種:

指標 ± 整數

當乙個指標和乙個整數量執行算術運算時,整數在執行加減法運算前始終會根據合適的大小進行調整。這個「合適的大小」就是指標所指向型別的大小。例如:

int* a;  int* b = a+1;  則 b - a = sizeof(int)

char* a; char* b = a+1; 則 b - a = sizeof(char)

# include int main(void)

;​ int *ptr=(int *)(&a+1);

​ printf("%d\n",*(a+1));

​ printf("%d\n",*(ptr-1));

​ return 0;

}

結果是 2 5

可知,a+1是陣列下乙個元素的位址,而&a+1是下乙個物件的位址,其中a所指向的型別為inta+1即為首位址+ sizeof(int),所以指向下乙個int型元素。

&a所指向的型別是乙個陣列,&a+1即為首位址+sizeof(a),即首位址+5*sizeof(int),所以ptr其實已經超過了陣列界限,並且剛好是陣列後面的第乙個位址。

ptrint*型別的,ptr-1為首位址- sizeof(int*),又剛好是a[4]。

用數字來描述,即假若陣列首位址是 10001

那麼*(a+1)就指向 10005 (int佔4位元組)

那麼 ptr 就指向 10021 (陣列末尾是10020,陣列整個佔4*5)

*(ptr-1)就指向 10017 (指標佔4位元組)

剛好是a[4],即a[0] + 4,即 10001 + 4*4.

指標 - 指標

只有當兩個指標都指向同乙個陣列中的元素時,才允許從乙個指標減去另乙個指標。

兩個指標相減的結果的型別是ptrdiff_t,它是一種有符號整數型別。

兩個指標相減的值是指兩個指標在記憶體中的距離(以陣列元素的長度為單位,而不是以位元組為單位)。

指標的算術運算

指標可以加上或減去乙個整數的算術運算。首先來看個例子 include int main void short st 3 double pw wa short ps st 0 cout pw 分析上面的程式,我們可以看到,c 一般把陣列名和第乙個元素的位址等價,所以我們可以用上面的兩種方法初始化指標,...

指標的算術運算

指標和陣列 指標和陣列在c語言中有錯綜複雜的聯絡。在前面的課程中,你學會了如何宣告陣列變數 int anarray 5 declare array of 5 integers 關聯陣列實際上是指標,指向陣列的第乙個元素!因為陣列變數 是指標,你可以解析它 它返回 陣列元素0 123 4567 int...

指標的算術運算

指標的算術運算 c語言允許你在指標執行整數的加減運算。如果pnptr指向乙個整數,pnptr 1 pnptr後在記憶體中的位址的下乙個整數。pnptr 1是在pnptr以前的整數字址。請注意,pnptr 1不在pnptr返回位址,但下乙個物件,pnptr分型。如果pnptr指向乙個整數 假設4位元組...