首先看一段程式:
輸出結果為:
2, 5
第乙個結果好說,a+1後指標指向了陣列中的『2』。 而第二個為什麼輸出『5』呢。 原理是c語言中的指標加減後,會根據指標的型別採用不同的偏移量。
比如, int* a; int* b = a+1; 則 b - a = sizeof(int)
char* a; char* b = a+1; 則b - a = sizeof (char)
將上述程式改寫如下,更容易認識其本質
其中只是引入了乙個中間變數 ptr指標, ptr指標的型別是 指向陣列長度為5的指標, 所以 ptr + 1 其實是加了sizeof(a)的位元組量,
ptr+1後指向了從a後面,即a開始數第6個位元組。
注意指向陣列指標的寫法。括號不能丟。
int a[n], 則a是乙個陣列型別,而不是int型了,要注意正確對待。
a與&a的值一樣,但意義不一樣, a+1的偏移量為乙個int,相當於&a[0], &a+1的偏移量為真個陣列。是陣列型別的指標。
C語言中的指標加減偏移量
首先看一段程式 cpp nogutter view plain copy include intmain int p int a 1 printf d,d n a 1 p 1 return 0 輸出結果為 第乙個結果好說,a 1後指標指向了陣列中的 2 而第二個為什麼輸出 5 呢。原理是c語言中的指...
檔案指標偏移量
f.seek offset,whence offset代表檔案的指標的偏移量,單位是位元組bytes whence代表參考物,有三個取值 0 參照檔案的開頭 1 參照當前檔案指標所在位置 2 參照檔案末尾 ps 快速移動到檔案末尾f.seek 0,2 強調 其中whence 1和whence 2只能...
C語言中結構體偏移量的計算
一 先來一段理論知識 ansi c標準允許任何值為0的常量被強制轉換成任何一種型別的指標,並且轉換結果是乙個null指標,因此 s 0 的結果就是乙個型別為s 的null指標。如果利用這個null指標來訪問s的成員當然是非法的,但 s 0 m 的意圖並非想訪問s欄位內容,而僅僅是計算當結構體例項的首...