寫 C 寫了好幾年,我一直以為自己搞懂指標跟陣列的關係了。
直到有一次,我在一個跨檔案的專案裡,某個 .c 檔宣告了 char buf[256],另一個 .c 檔用 extern char *buf 去引用它。編譯過了,連結也過了,一跑就 segfault。
我盯著螢幕看了十分鐘,心裡想:「這兩個不是一樣的東西嗎?」
不是。這篇就是要把這件事從根本講清楚。
🧠 陣列不是指標,指標不是陣列
先把結論放前面:陣列和指標是兩種完全不同的東西,只是在某些場景下行為很像,像到讓人誤以為它們是同一個東西。
int arr[5] = {10, 20, 30, 40, 50};
int *ptr = arr;