陣列名是陣列的首位址,就是陣列中的第乙個元素的位址,是常量。常量是不能值在=的左邊的。陣列和指標的區別在於,指標是變數,是用來儲存指向資料的位址的變數,而陣列名是常量。一般情況下申明乙個陣列,比如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出現在函式申明中,所以它實際是乙個指標,他並不是指向乙個字串的指標陣列的首位址的變數。
C語言中陣列名與 陣列名的區別
include int main void int ptr int a 1 a代表整個陣列的位址,1應該加上sizeof a 的長度,所以ptr指向a 5 位置處。printf d d n a 1 ptr 1 a代表陣列首元素的位址,1應該加上sizeof a 0 所以a 1指向a 1 處。retu...
c語言中陣列名和陣列名取位址理解
1 陣列名是個指標型常量,也就是值不能被改變。指標常量和常量指標區別見本文 char str hello char ch 6 hello ch str 錯誤,常量不能被賦值,正如 1 2,字面值常量1被賦值為2一樣錯誤。char ch 2 定義後,陣列名相當於char const ch 0x.ch就...
C語言中陣列名和陣列下標
整理自 c陷阱與缺陷 陣列注意點 1.c陣列中只有一維陣列,陣列的大小必須在編譯期作為常數確定。但c陣列的元素可以是任何型別的物件,當然也可以是另乙個陣列,所以 出乙個多維陣列。不太明白為什麼要強調只有一維陣列,難道 模擬 出來的多維陣列和真正的多維陣列不一樣?2.對於乙個陣列,我們只能夠做兩件事 ...