說明:
1)一維陣列指標表示方法 int *p = a 而非 int *p = &a
也可int *p = &a[0]表示
2)p + 1 或a + 1表示的是指向下乙個位址
#include
int main(int argc, const char * argv)
; printf("a[0] = %p\n",&a[0]);
printf("a[1] = %p\n",&a[1]);
printf("a[2] = %p\n",&a[2]);
//定義陣列指標,
int*p = a;//p = a
//取位址
printf("p = %p\n",p);//指向a[0];
printf("p + 1 = %p\n",p + 1);//p + 1指向a[1]; = 0x7fff5fbff874
printf("a + 1 = %p\n",a + 1);//a + 1指向a[1]; = 0x7fff5fbff874
//取內容
printf("*(p + 1) = %d\n",*(p + 1));//
*(p + 1)指向a[1]的值; =2
printf("*(a + 1) = %d\n",*(a + 1));//
*(a + 1)指向a[1]的值; =2
//printf("*p++ = %d\n", *p++);//=1;
printf("*p= %d\n", *p); // =2;
//使用陣列指標遍歷陣列
int*pp = a;
for (int i = 0; i < 4; i ++)
printf("\n");
return
0;}
結論:
引用乙個陣列元素,可以使用二種方法:
1)下標法 ,a[i];
2)指標法,(a+1) 或 (p+1)
3) a是常量 (a++)錯誤, p是變數(p++)正確
一維陣列 指標
下標法 容易理解 元素 a i 指標法 推薦使用 元素 a i 因為編譯器將a i 解釋為 a i 需要時間,所以直接將a i 寫成 a i 可提高執行效率 下標法 元素 p i 指標法 元素 p i 都不是簡單的 1,1指的是1個記憶體單元 p p p 1,p的值改變了 p 1並沒有改變p的值 a...
C經典 指標陣列與二維陣列指標變數的區別
1.指標陣列 定義 int p n int p p表示多個指標 優先順序高,先與p結合成為乙個陣列,再由int 說明這是乙個整型指標陣列,它有n個指標型別的陣列元素。這裡執行p 1是錯誤的,這樣賦值也是錯誤的 p a 因為p是個不可知的表示,只存在p 0 p 1 p 2 p n 1 而且它們分別是指...
C語言 指標和一維陣列
include void main void int a 5 int ptr int a 1 printf d n a printf d n a 因為a和 a的值是相等的,則 a不是指向指標的指標 printf d n a printf d n a 但是 a和 a的值是不相等,a和a的值是相同的,說...