1. 程式人生 > >c語言中的陣列名代表的意義

c語言中的陣列名代表的意義

陣列名是陣列的首地址,就是陣列中的第一個元素的地址,是常量。常量是不能值在=的左邊的。陣列和指標的區別在於,指標是變數,是用來儲存指向資料的地址的變數,而陣列名是常量。一般情況下申明一個數組,比如char  a[10]; 之後  陣列名a都是陣列的首地址,是一個地址常量。但是在函式申明的形參列表中除外,比如:

int  fo(char []);

在這種情況下的申明與

int  fo(char a[]);

int  fo(char *a);

是等價的,就是說在這種情況下,就算你寫的是陣列的形式,編譯器實際處理的時候也是當做指標來處理的,(此時,指標是變數,形參也是變數,二者剛好對應。)所以在函式fo內部,我們隊a   ++   --    +=   -=   = 之類的帶賦值的操作是完全合法的,因此a就是一個指標,不是陣列名,當我們向fo裡面傳入我們一個已經事先申明的陣列的首地址,指標a裡面的值就是已經申明的陣列進行操作,正是因為c有這個傳遞著的優點,所以省略了很多不必要的拷貝工作,試想如果沒有這個傳地址,我們傳遞一個幾萬個元素的陣列進去,拷貝工作是相當可觀的,這樣我們明白了 int main (int argc,char  **argv

);裡面為什麼可以對argv進行++操作,既然main函式的第二個形參是一個指向字串的指標陣列,argv出現在函式申明中,所以它實際是一個指標,他並不是指向一個字串的指標陣列的首地址的變數。