C語言中的指標加減偏移量

2021-05-21 23:13:09 字數 527 閱讀 3605

首先看一段程式:

輸出結果為:

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欄位內容,而僅僅是計算當結構體例項的首...