陣列名a與 a的區別

2021-06-17 18:48:30 字數 699 閱讀 2164

對於乙個陣列  int a[5];  a表示陣列首元素的位址,而&a表示陣列的首位址。

假設 &a[0]的位址為0x00ffff00;則&a[4]的位址為0x00ffff12; 那麼&a+1 的位址為陣列的首位址加上該陣列的偏移量sizeof(a)(20),a+1 則是陣列首元素的位址加上該陣列乙個元素的偏移量sizeof(a[0])(4)。

上面的都應該明白了吧,下面請看

#include "stdafx.h"

int main(int argc, char* argv)

;char (*p1)[5]=&a;

char (*p2)[5]=a;

return 0;}

這個你怎樣理解?那個是正確的?

(*p)[5]表示p是乙個指向含有5個元素的指標變數。

對於char (*p1)[5]=&a; 是把&a的位址賦給指標變數p1(p1是有記憶體的,它裡面儲存了指向陣列的位址),這裡型別相同(都是含有5個元素的陣列首位址),若此句改為char (*p1)[3]=&a; 或者char (*p1)[10]=&a; 都會報錯,因為所包含的嚴肅個數不同,我認為即 位元組數不同,只有包含的元素相同才能賦值操作,當然這要是在指向記憶體裡存的值得型別一樣的前提下。

從上面的分析自然就知道char (*p2)[5]=a;這句是錯的了,乙個是  char  *[5] 乙個是 char [5]。(a是sizeof(a)空間的名字)

C語言 陣列名與 陣列名的區別

char str 10 str 的值為str 0 的位址值,型別為char 型 str的值為陣列的首位址,型別為char 此處,兩者的值是相同的。所以在使用的時候要注意指標的型別,值相同,型別不同也是不對的 include include include include contact.h int ...

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...

陣列名與指標區別

1 陣列名的內涵在於其指代實體是一種資料結構,這種資料結構就是陣列 2 陣列名的外延在於其可以轉換為指向其指代實體的指標,而且是乙個指標常量 3 指向陣列的指標則是另外一種變數型別 在win32平台下,長度為4 僅僅意味著陣列的存放位址!1 陣列名指代一種資料結構 陣列 現在可以解釋為什麼第1個程式...