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

C語言指針與數組深度掌握:內存模型、訪問機制與進階類型

     編輯:關於C

1. 指針本質:存放地址的變量

int arr[5] = {1,2,3,4,5}; // 編譯器分配20字節連續空間,不可縮放
  • &arr:數組首地址(類型int(*)[5],步長20字節)。
  • &arr[0]:首元素地址(類型int*,步長4字節)。
  • 值相等但類型語義不同,如「陝西省政府」與「西安市政府」同址異義。

數組名的左右值屬性

  • 右值:arr等價&arr[0],表示首元素地址。
  • 非左值:arr不可賦值(地址不可修改),故arr = p非法。

3. 指針與數組的訪問等價性

兩者均可用指針算術(*(p+i))或下標(p[i])訪問。編譯器將a[b]統一翻譯為*(a+b)。
區別在於定義時的內存佈局:指針變量單獨佔用空間存地址;數組直接佔用元素空間。

4. 經典面試題:&arr + 1 vs arr + 1

  • &a + 1:按數組類型步長(5*sizeof(int))跳躍。
  • a + 1 / &a[0] + 1:按元素類型步長(sizeof(int))跳躍。

5. 指針數組 vs 數組指針

聲明名稱含義優先級結合
int *p[5];指針數組含5個int*元素的數組[ ] > * → (p[5]) 先結合
int (*p)[5];數組指針指向int[5]類型的指針( ) > [ ] → (*p) 先結合

6. 函數指針族系

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