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

C 指標筆記(四):多維陣列指標、指標的指標與字串指標陣列

     編輯:關於C語言

二維陣列與指標

int a[4][5] = {{1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}};
// 記憶體連續:第 0 列 5 個 int,接著第 1 列 ...

// 取元素位址
&a[i][j]  // 第 i 列第 j 行元素位址

// 陣列名轉型
int (*p)[5] = a;   // p 指向「含 5 個 int 的陣列」,型別 int (*)[5]
p[i] 等價 a[i]    // p+i 偏移 i*5*sizeof(int) 位元組

指標的指標(雙重指標)

char *names[] = {"China", "Beijing", "Longmai"};
char **pp = names;        // pp 指向 names[0] 的位址
pp[0] == names[0]         // "China"
pp[1] == names[1]         // "Beijing"
// 常見用途:函數修改呼叫端的指標變數、動態二維陣列、main 的 argv

字串指標陣列遍歷

char *cmd[] = {"ls", "-l", "/home", NULL};
for (char **p = cmd; *p; p++) {
    printf("arg: %s\n", *p);
}

記憶體圖解關鍵點

  • a、&a[0]、&a[0][0] 數值相同,**型別不同**;
  • a+1 跳過整列(5*sizeof(int)),&a[0]+1 同理;
  • *(a+i)+j 等價 a[i][j];
  • 二維陣列**不是** int **,切勿強轉。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved