指標陣列的陣列名錶示什麼?

2025-07-08 10:45:13 字數 1595 閱讀 6285

1樓:融梅示緞

指標陣列。的陣列名就是該指標陣列首元素的位址的別名。

比如,乙個人可以叫王小二。

也有並並穗叫它小二,或者小王,其實都是指同乙個人。

指標陣列就比如這個例子:int

p[10]那麼p等價於&p[0]

因為指標裡面儲存的是位址(十六進位數,所以&p[0]這裡面存放著乙個int變數的位址。

比如。int

p[10];

可以把&p[0]看成一張記錄著位址的紙,那麼根據這張紙的位址找到某個倉庫,在倉庫裡面又放著記錄著乙個int變數位址的紙,又根據這個位址找到了存放int變數的倉庫,在這個倉庫裡面放著int的值,其實就想尋寶一樣,根據一關一關的線索找到指定的寶藏。

2樓:靳恭舜水

陣列名只有在sizeof()中表示陣列,在其他毀洞情況下都是表示陣列首元素的指標。int

a[2][3]中陣列名a表示陣列首元素a[0]的位址,a[0]的型別是int

3],因笑或此a的型別是int

printf("p=%p",p);

列印的是二維陣列的首位址。

printf("a[1][2]=%d",*p+5));

列印的是元素a[1][2]的值,這是因為p+5時p的值加上5*sizeof(int),此時p的值正好是元素a[1][2]的位址。

printf("a的位址=%p",a);

列印陣列的首元素的位址。

printf("a的值=%p",*a);

列印的是陣列a[0]的首元素的位址,即a[0][0]的位址,這是因為a是陣列指標,*a是陣列,陣列名在除sizeof之外,都表示首元素的碰餘伍位址。

列印元素a[1][2]的值,這是因為*(a+1)表示a[1],(a+1)+2)表示陣列a[1]的第二個元素的位址。

指標陣列那個陣列名屬於指標嗎

3樓:網友

陣列名只在源**中有意義,因此在源代嗎環境中或者說編譯時才有意義(已經編譯完成的可執行程式中只有位址),這時候,編譯器會為所有資料實體建立對映表「識別符號-位址」,包括變數、陣列、物件、結構、函式體,以便於當遇到某個變數時可以轉換為位址,同時在方便除錯跟蹤。

如果編譯時為debug模式,則這些表和其他額外資料作為除錯引數包含在目標程式中,而如果編譯為release版本,不包含這些資訊。

因此從編譯角度說,任何變數名都是指標,所以指標陣列名當然也是指標,最簡單的int a,這個「a」本身也是個指標。當訪問任何變數時,編譯器會安排先取位址,然後根據變數型別決定是否進一步取值,即隱式轉換。

比如訪問普通變數時,編譯器預設操作為取值,因此,當int b=a時,則是先取a和b的位址,再取a的值寫入b的記憶體中,如果要取a的位址,則需要顯式轉換即int *p=&a;,這樣編譯器就取了a的位址後直接賦值給p了,而不會進一步操作。而如果a為陣列,遇到int *p=a;編譯器取完位址後直接賦值給p,而不會做進一步操作。

總結:1、資料實體:源**中所有變數、陣列、物件、結構、連結串列。。。函式體,一切可訪問資源。

2、任何資料實體都有位址。

3、編譯器訪問資料實體時,必須先定位,也就是必須取得位址。

4、普通變數取值,陣列取位址都是編譯器設計好的隱式轉換。

c陣列名表示陣列的首位址,對於字元陣列,陣列名表示什麼

int a 4 a表示a 0 的位址char str 4 asd str表示 字串 asd 非等號後面的 asd 的首位址,是版str 0 的首位址,是 a 的首位址 cout 個字串,cout對於字串就是這樣處理的,輸出字串內容 而a輸出的是a 0 的位址 cout對於非字串,就會輸出陣列名所表示...

二維陣列名和指標的關係,C語言中陣列名和指標的區別

二維陣列名即陣列地址,指向首行地址,表面上看,行地址即一維陣列指標,而陣列名指向行就應該是指標的指標,但是必須注意指標也是有型別的,型別不同資料寬度也不同。如果a 10 10 假設int p a 那麼要對行遞增執行p 時,編譯器如何知道列寬?因為int 是指指向一個 int 型別的指標,32位系統中...

為什麼C語言中二維陣列的陣列名a和a表示的是同值

當定義二維陣列a m n 時,陣列名可以認為是二維指標,其指向二維陣列的首位址。於是a的值就是首位址的值。而 a,就是a 0 a 0 是第一行的標記,代表第一行的首位址。在二維陣列中,所有元素都是緊密排列的,這樣整個陣列的首位址,第一行的首位址,和第乙個元素的首位址,即a,a 0 a 0 0 都是相...