[C 的那些眉角]指標與陣列的關係 — 從根本搞清楚

寫 C 寫了好幾年,我一直以為自己搞懂指標跟陣列的關係了。

直到有一次,我在一個跨檔案的專案裡,某個 .c 檔宣告了 char buf[256],另一個 .c 檔用 extern char *buf 去引用它。編譯過了,連結也過了,一跑就 segfault。

我盯著螢幕看了十分鐘,心裡想:「這兩個不是一樣的東西嗎?」

不是。這篇就是要把這件事從根本講清楚。

🧠 陣列不是指標,指標不是陣列

先把結論放前面:陣列和指標是兩種完全不同的東西,只是在某些場景下行為很像,像到讓人誤以為它們是同一個東西。

int arr[5] = {10, 20, 30, 40, 50};
int *ptr = arr;

閱讀全文