首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

《C 和指標》學習筆記 3:陣列與指標的深度關係——一維、多維、指標陣列與二級指標

     編輯:關於C語言

核心觀念:陣列名退化為首元素位址

int a[] = {1,2,3,4,5};
iterate(a);  // void iterate(int *p) { for(i=0;i<5;i++) printf("%d", *p++); }

指向一維陣列的指標

int (*p)[3];  // p 指向「含 3 個 int 的陣列」
int a[3][3] = {{11,12,13},{14,15,16},{17,18,19}};
iterate(a);   // void iterate(int (*p)[3]) { printf("%d", *(*(p+i)+j)); }

*(*(p+i)+j) 等價 p[i][j],p+i 移動整行大小(3×sizeof(int))。

指標陣列:char *p[3]

char *strs[3] = {"zhanhua", "linin", "wanwu"};
for (int i=0;i<3;i++) printf("%s", *(strs+i)); // 或 strs[i]

二級指標:char **ps

char **ps = strs;  // ps 指向指標陣列首元素
for (int i=0;i<3;i++) printf("%s", *(ps+i));

關鍵區別速查

宣告含義sizeof(變數)
int *p指向 int 的指標4/8
int (*p)[3]指向 int[3] 的指標4/8
int *p[3]3 個 int* 的陣列3×4/8
int **p指向 int* 的指標4/8

理解「類型決定解參考行為」、「指標運算步長由指向類型決定」,即可輕鬆駕馭多維陣列與指標陣列互轉。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved