一.除錯目的:pa[3] = 0xbfd8be6a觀察指向陣列元素的指標之差為陣列元素個數的現象。
二.除錯步驟:
觀察int和char型陣列的現象,對比兩型別輸出的位址差作,可以排除陣列元素指標做差是簡單通過所指向的陣列元素下標做差而來的猜想。
三.除錯**:
#include int main (void
) ;
int b[ ] = ;
char * pa1 = &a[1
];
char * pa2 = &a[3
];
int * pb1 = &b[1
];
int * pb2 = &b[3
];
printf (
"pa[3] = %p\n
", pa2);
printf (
"pa[1] = %p\n
", pa1);
printf (
"pa[3]-pa[1]:%x\n
", pa2-pa1);
printf (
"pb[3] = %p\n
", pb2);
printf (
"pb[1] = %p\n
", pb1);
printf (
"pb[3]-pb[1]:%x\n
", pb2-pb1);
return0;
}四.編譯結果:
pa[1] = 0xbfd8be68
pa[3]-pa[1]:2
pb[3] = 0xbfd8be4c
pb[1] = 0xbfd8be44
pb[3]-pb[1]:2
分析:可以看到char型,int型陣列元素指標之差都為2,即指向元素下標之差。char型陣列元素指標的位址差為2(=2*1)(1為char位元組大小),int型陣列元素指標的位址差為8(=2*4)(4為int位元組大小)。
說明陣列元素的位址差是int型大小4乘以元素下標差(即元素相差個數)的,但指向陣列元素的指標相減,printf會輸出相差的元素個數。這是與printf的實現有關的,我們通過聯想c語言的陣列知識來理解記憶,在陣列中,我們知道陣列首位址加上乙個偏移量,就可以得到對應下標的元素,而這裡我們的情況是變成指標做差的而已。
c語言中指標和多維陣列的理解
1.複習指標和陣列之間的特殊關係 不帶方括號的陣列名是乙個指標,指向該陣列的第乙個元素。2.多維陣列 int multi 2 4 宣告乙個二維陣列作為舉例 a.理解方式1 可以將陣列看成行和列構成,即理解成2行4列。傳統的理解方法 理解方式2 可以將multi陣列看作乙個包含2個元素,而其中每個元素...
C語言中指標陣列與陣列指標
1 指標陣列的實質是乙個陣列,這個陣列中儲存的內容全部是指標變數。2 陣列指標的實質是乙個指標,這個指標指向的是乙個陣列。1 int p 5 int p 5 int p 5 2 一般規律 int p p是乙個指標 int p 5 p是乙個陣列 3 如果核心和 結合,表示核心是指標 如果核心和 結合,...
個人c語言中指標的理解
定義指標 int p int i p i p是指向i位址的指標 p 10 指的是i的值變成了10指標在使用前一定要賦值 確定指標指向 為指標變數賦的值必須是乙個位址 將指標變數初始化為空指標,意為該變數不指向任何值 int ptr null 將變數位址賦值給指標 int a int p a 或者 i...