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

C語言數組與指針的深度關聯與互換性

     編輯:關於C語言

核心關係

  • 數組名 = 數組首元素地址(常量指針)
  • 指針變量 = 可修改的地址變量
  • 本質:兩者皆為地址,但指針可運算,數組名不可

等價關係

char s[30], *p;
p = s;          // p 指向 s[0]
(p + i) = &(s[i])
*(p + i) = s[i]

存儲分配差異

特性數組指針
內存分配編譯期靜態/棧上自動運行期動態或指向現有內存
大小確定聲明時固定分配時指定
生命週期作用域結束自動釋放手動 free 或作用域結束

互換使用模式

// 遍歷數組
for (p = s; *p != '\0'; p++) putchar(*p);
// 或
for (i = 0; s[i]; i++) putchar(s[i]);

函數參數傳遞

數組作參數退化為指針:

void func(int arr[])  // 等價於 void func(int *arr)
void func(int *arr)   // 內部 sizeof(arr) 為指針大小,非數組大小!

最佳實踐

  • 需要固定大小、自動管理內存 → 用數組
  • 大小動態、需調整大小、跨函數共享 → 用指針 + malloc
  • 函數處理數組時,額外傳遞長度參數
  • 字符串處理優先用指針遍歷,結束條件 *p 或 *p == '\0'

數組與指針的「等價但不相同」是 C 語言最核心也最易混淆的概念之一,深入理解其內存模型與語義差異至關重要。

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