c語言指標二維陣列a中,a和a 0 的值不應該是一樣的嗎?為什麼會出現以下問題?

時間 2021-06-09 06:21:13

1樓:

給你把各個型別的關係理清就懂了。

首先說a,假設a是乙個5個元素的int陣列,那麼a的型別是int [5],是陣列型別,其元素為int,有5個元素長。

然後關於a+1這個表示式,由於陣列型別本身是不可變的,也不可+1,但是c語言規定了一條規則,那就是陣列型別可以隱式轉換成其首元素的指標,結果型別是int*,int*是可以+1的,所以a+1的結果就等於首元素指標往後移乙個元素的位置,指向第二個元素。

而a[0],實際上a[b]這個運算子,就等於*(a+b),同理,a[0]就是陣列a轉成首元素指標,加上0,也就是不變,然後*解引用,結果自然就是陣列首元素本身。

所以結論就是,a是陣列,可以隱式轉換為首元素指標,而a[0]就是首元素本身,所以你要說*a等於a[0]是有道理的,或者a等於&a[0]也行,但是a和a[0]就不是了。

2樓:朱涵俊

a跟a[0]只是位址相同,型別,sizeof都不一樣。

a[0]+12, a[0]的型別int [4],用於計算時候,會轉成int *,加12即加12個int *;

a+12,a的型別是int [3] [4],用於計算的時候,會變成指標,int [4] *,加12即加了48個int *;

3樓:Reverier

並不是哦

陣列名是指向陣列第乙個元素的指標, 所以並不是a == a[0], 而是*a == a[0]

事實上C語言和C++的運算子都是解釋為指標加偏移的, 所以a[2] == *(a+2)

你甚至還可以這樣寫: 2[a] == a[2] , 因為編譯後都解釋成了指標加偏移, *(a+2)和*(2+a)的結果是一樣的.

C語言指標 二維陣列,為啥會這樣?

沒明白你不理解的點在哪,我猜是單純糾結於為什麼要寫成0 COLS 0而不直接寫0。答案是直接寫0也可以,其實是為了統一下格式,就是乘號,結果上和直接寫0沒區別。int a 0 COLS 0 int a 1 COLS 2 int a 3 COLS 2 統一成這種格式而已。沒啥講究的,還是 指標 破數字...

C語言,講通過指標引用多維陣列時,講到的a 0 與 (a 0)等價怎麼理解?

位址偏移有什麼難以理解的其實還有0 a a 0 a 0 奇怪的0 a 好像是在 c與指標的書裡有詳細說過 a如果是個陣列的話,單獨使用a這個識別符號代表a的首位址。然後如果是a 0 這樣的寫法,代表引用a陣列的下標為0的元素,也就是取a陣列第乙個元素的值。這個下標為0的元素的位址實際上跟整個陣列a的...

如何理解一維指標陣列指向二維指標

szouc 兩個重要的基本概念偶爾會在教材中被忽視。1.陣列名出現在表示式中會隱式轉換成指向該陣列第乙個元素的常量指標。特殊情況暫忽略。2.解引用 運算子與下標 運算子等價,a 3 a 3 c 2 4 c 2 4 c 2 4 題目中 int c 4 是指標陣列,當陣列名 c 出現在表示式中,根據 1...