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) 為指針大小,非數組大小!
*p 或 *p == '\0'數組與指針的「等價但不相同」是 C 語言最核心也最易混淆的概念之一,深入理解其內存模型與語義差異至關重要。