C語言中的數組名

  這裏我們先看看數組名代表的是什麼,這個概念可能大家有所誤解,認爲數組名代表的就是數組的地址,當然,數組名代表的是一個地址,但是關鍵是,通過這個地址,我們關注的是它能取得多大空間的數據的值,例如對於一個char 類型的地址,我們能夠取得一個字節的值,對於一個int型的地址,我們能夠取得4個字節的值。

 這裏我們以整形數組爲講解:int  a[4];

   a是一個地址,我們知道a其實本來的面目應該是:a+0,只不過這個0我們就省了,*(a+0)是什麼呢,這個代表的就是取得第一個元素的內容,也就是a[0],所以我們可以知道a它代表的應該是第一個(下標爲0)元素的地址。

   這裏我們先從另外一個方面來理解什麼是數組,其實我們可以把數組假設爲一個基本類型變量,它的類型爲 int [4].也就是變量a這個對象代表的就是4個int那麼大小的一個區間,而且不可分割。它和一般變量不同的地方在於,它的操作受限,不能像一般變量那樣,直接通過賦值符號一次性將整個區間的值賦值給另外一個相同的數組變量。而只能通過下標來一個個元素的賦值。

   通過上面的分析,&a就好理解了,他就是變量a的地址,這個變量a的作用範圍是四個int空間的數據,也就是如果將&a賦給某個變量p,p的類型應該是:int (*)[4];也就是指向包含4個int數據的數組的指針。

   再來看看a+1和&a+1的區別,a+1表示的是數組第一個元素地址,&a+1表示的是跨過a數組的下一個地址。通過圖來表示可能更加清晰可理解:

&a與a的差別

   其實&a和a的值倒是完全一樣的,都是下標爲0的元素的地址,關鍵在於它們的作用域不同,在網上看到一個比喻覺得挺恰當的,長沙在長沙市來說是中心,同時在湖南省來說,也是湖南省的政治中心,長沙即作爲市的中心,也作爲省的中心,但是在不同的範圍內,表達的意思是不一樣的。

來源:http://blog.csdn.net/wanwenweifly4/article/details/6424058
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章