指標 + 1 並不是指標代表的位址值 + 1.
char a = 'a';
char *p = &a;
cout<<(void*)p<<" "<<(void*)(p+1)《輸出:0012ff33 0012ff34
p指向的是乙個字元,p+1就是移動乙個字元大小,乙個字元就是乙個位元組,所以p +1 代表的位址就比 p 代表的位址大1。
int i = 1;
int *p = &i;
cout<<(void*)p<<" "<<(void*)(p+1)《輸出:0012ff30 0012ff34
p指向的是乙個整型,p+1就是移動乙個整型大小,即移動4個位元組,所以p+1代表的位址比p代表的位址大4.
這些操作是由編譯器來完成的。所以,指標必須指向某個型別,這樣編譯器才能知道指標每次加1時真正記憶體的步長是多少.
指標的問題1
指標使用前需要先行定義變數。就像下面這樣 include int main int number 20 int pointer number int a 0 a pointer 5 result 0 很明顯這個簡單的程式執行的結果是25 那麼問題來了,假如我在指標被賦值變數位址之後對變數進行新的賦值...
2021 02 08 一些指標的問題(1)
4.空指標和野指標 4.1 不能向空指標和野指標指向的記憶體進行操作,如果操作程式中斷。4.2 野指標的情況 4.2.1 指標變數未初始化 4.2.2 mallo後free 未置空。4.2.3 指標變數超出了作用域 4.3 空指標 可以重複釋放。4.4 野指標 不可以重複釋放。5.指標的步長 5.1...
指標 1的討論
ww 原則 指標的加操作,是指標對應資料型別的大小的加,比如 char p p p sizeof char p 1 int p p p sizeof int p 4 因此在上面的例子中 int ptr int a 1 a是指向a的指標,當把 的時候,這個指標需要加上sizeof a 的值,因此 的結...