陣列名的討論

2021-10-08 11:32:18 字數 835 閱讀 2628

1、int a=10;

在棧申請一塊空間,四個位元組,這個記憶體裡面放的是10的二進位製碼,在8086架構裡,按小端方式儲存。

*a,解開的是這個空間的內容,是個int型別。

a,是這塊記憶體的識別符號,也就是名字,不在記憶體中顯示,由編譯器識別,然後處理。

因為型別是int型別,所以a指的是四個位元組的範圍。

對a進行賦值,取出這個int型別的位址的內容(四個位元組的內容),往裡面賦值。

2、int a[3]=;

但是想取到a[3]陣列中的第三個值的位址咋辦嘞?

可以這樣做——

(int *)(&a)+2
把這個位址對應的東西的型別,轉化成int 型別。

可是有點複雜,所以編譯器提供了一種操作,

往下看:

因為我們不用對a複製,陣列不能直接a=b,這種操作,所以,這個a就可以另作他用,可以當作首元素的位址指標

這樣我們對這個a[3]的第三個值取位址,直接a+2;取值的話直接*(a+2),但是還是有些複雜,c語言是希望小而簡,所以想要得到這個3的值,還可以a[2],直接不用取位址,a[2]表示的就是*(a+2),就是3。

3、int a[2][3]=;

在棧中申請一塊空間,這塊空間的型別是兩個陣列元素的陣列型別,這兩個元素,每個元素是3個int元素的陣列,一塊記憶體是陣列型別,每個元素的型別是陣列,這個陣列的每個元素是int。

思考題:

*(&a)表示的是什麼呢?

&(*a)表示的又是什麼呢?

*(&a)+1表示的是什麼呢?

&(*a)+1表示的又是什麼呢?

c c 關於陣列名的討論

指標是c c 語言的特色,而陣列名與指標有太多的相似,甚至很多時候,陣列名可以作為指標使用。於是乎,很多程式設計者就被搞糊塗了。而許多的大學老師,他們在c語言的教學過程中也錯誤得給學生講解 陣列名就是指標 很幸運,我的大學老師就是其中之一。時至今日,我日復一日地進行著c c 專案的開發,而身邊還一直...

陣列名和陣列名的取址

關於陣列名和指標的區別 推薦看這兩篇文章 示例 char a 3 輸出10進製位址 輸出 a 為 2686777 a 為 2686777 a是陣列名,編譯器處理時相當於陣列首元素的位址 a是乙個指向陣列的指標,值為陣列的位址,等於陣列首元素的位址 輸出 a 為 1 a 為 1 a 為 2686777...

sizeof 陣列名 及strlen(陣列名)

程式的輸出結果為 1 100 2 4 3 1 相當於a 100 這個數所佔的位元組大小,也就是乙個char位元組占得大小 當陣列作為函式的引數進行傳遞時,該陣列自動退化為同型別的指標。不論陣列a的容量是多少,sizeof a 始終等於sizeof char func char p int main ...