我在這裡只想寫下結論,因為過程不小心被我刪了,再寫下來很費精力。
char a = "520"; // ----1
char *a = "520"; // ----2
把它們當作兩個完全不同的東西——容易讓你接受下面的真理:
1、1中位址空間內儲存的實際值是"520",位址本身是a; 2中位址空間內儲存的實際值是乙個位址,位址本身是&a。
2、對於陣列a的任何引用,都相當於引用它本身的位址——對於指標a的任何引用,都相當於引用它儲存的實際值。
3、對於陣列a,使用"&"(取位址)操作符,返回值同2,但意義不同(見5);對於指標a,則返回它本身的位址。
4、這是對於3的補充:陣列名——a,是乙個常量,不允許做任何修改。但是不同於其他常量,c語言在這裡並不替換它,而是把預設當成乙個指標來使用。
5、有了4作基礎,因此也可以在陣列名上做任何指標可以做的操作——多好啊!但是在陣列名上做"&"操作有何意義呢?答案是有顯著意義的。對於像char a[5];這樣的句子,在任何時候引用a,a都會被解釋成char*。因此我們再使用a+1,或者a-1,都會按照char*的操作來解釋——前進4位或後退4位。然而如果我們用&a,雖然位址一樣,但是編譯器在看到這個語句的時候就會把&a解釋成char (*)[5];我們再在&a上做+或-的運算,就會按照char (*)[5]的行為來進行響應的操作——前進後退5位。
陣列名和指標
c c 陣列名與指標區別深層探索 看了這篇文章之後,終於將混淆了很久的概念搞清楚了。1 陣列名的內涵在於其指代的實體是一種資料結構,其資料結構就是陣列 2 陣列名的外延在於其可轉換為指向其指代實體的指標,而且是乙個指標常量 3 指向陣列的指標則是另外一種變數型別,僅僅意味著陣列的存放位址。陣列名在作...
陣列名和指標
問 陣列名不是首元素的指標咩,為什麼sizeof陣列名能夠知道陣列長度?答案 陣列名與指標有太多的相似,甚至很多時候,陣列名可以作為指標使用。於是乎,很多程式設計者就被搞糊塗了。而許多的大學老師,他們在c語言的教學過程中也錯誤得給學生講解 陣列名就是指標 這種誤解的根源在於國內某著名的c程式設計教程...
陣列名和指標
參考 參考 int array 10 array 錯,只有當陣列退化為指標才能有自增操作。因為1.sizeof操作符的結果型別是size t,它在標頭檔案中typedef為unsigned int型別。該型別保證能容納實現所建立的最大物件的位元組大小。2.sizeof是算符,strlen是函式。3....