首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 指針數組名可修改原因:指針變量 vs 數組名常量

     編輯:程式設計綜合問答

代碼片段

int x[4][3] = {0};
int (*p)[3];  // 指向「含 3 個 int 的數組」的指針
p = x;        // 合法:指針變量可賦值

核心區別

標識符本質可作左值賦值?原因
x (二維數組名)行指針常量否編譯期固定地址,代表整個數組首地址
p (指針變量)指針變量是運行期存儲地址,可隨時改變指向

類比理解

  • int a[3] 中 a 相當於 int *const a(常量指針),指向固定內存塊。
  • int *p 相當於 int *p(指針變量),可指向 a、malloc 內存、其他數組。
  • int (*p)[3] 同理:是指針變量,步長為 3*sizeof(int),可指向任何符合類型的數組首地址。

記憶口訣

「數組名是常量指針,指針變量才能改。」
聲明時帶 * 且非 [] 形式的,通常是指針變量(除非 const 修飾)。

延伸:指針數組 vs 數組指針

int *p1[3];     // 指針數組:3 個 int* 元素
int (*p2)[3];   // 數組指針:指向 int[3] 的指針

括號決定結合優先級,**數組指針才是二維數組行指針的正確類型**。

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