如果我已經建立像 INT標記的陣列[4] [2]; 則數組名稱必須給我的第一個元素的地址,在一個維數組的情況下,但它是不是這樣呢? &也
printf("%d",marks[0]); & printf("%d",marks);
產生相同的結果?????????關於二維陣列
Q
關於二維陣列
0
A
回答
2
printf("%d",marks);
給人一種錯誤的格式說明符導致未定義行爲。 marks
導致指向1D數組的指針(即指向第一行的第一個元素的指針)。
因此,將指針的內容%p
應改爲使用。
printf("%p",marks);
而且似乎您試圖在一個位置打印值。所以 -
printf("%d",marks[0][0]); // [m][n] is the way of accessing 2D array elements.
0
在C語言中,例如二維陣列被視爲一維數組,其元素是一維arrays.So如果你想要得到的任何元素的地址,你將不得不使用
的printf(「% 8u \ n「,& a [i] [j]);
兩個打印語句打印相同的結果,因爲這兩個標記和標記[0]是指向二維陣列的第一行的起始。
+0
這就是我所要求的,這兩個不是給我同樣的結果 – nobalG 2011-04-12 06:42:36
1
它的行爲如預期對我來說:
#include <stdio.h>
int main(int argC,char* argV[])
{
int marks[4][2]={0};
printf("%x %x %x\n"
"%x %x %x\n"
"%x %x\n",
marks,marks[0],marks[0][0],
*marks,&marks,**marks,
&marks[0],&marks[0][0]);
return 0;
}
具有輸出:
12ff44 12ff44 0
12ff44 12ff44 0
12ff44 12ff44
所有指針到列表中的第一個元素(除了是的第一個元素的零列表)。
0
當您在printf
格式使用%d
,相應的參數(後默認促銷)必須有類型int
。既然你在這兩種情況下違反了這條規則,任何事情都可能發生
marks
具有類型int[4][2]
並衰減到int(*)[2]
,這不是int
。
marks[0]
具有類型int[2]
和衰減到int*
,這是不int
。
(但我仍然感到驚訝的實際執行將輸出不同的地址。)
相關問題
- 1. 二維陣列
- 2. 二維陣列
- 3. 二維陣列
- 4. 二維陣列
- 5. 從二維陣列到一維陣列?
- 6. 排序二維陣列基於一列
- 7. 從二維陣列
- 8. 二維陣列VB
- 9. 二維陣列C#
- 10. 匹配二維陣列與一個二維陣列
- 11. 二維陣列列表java
- 12. 推新陣列爲二維陣列
- 13. 將二維numpy陣列轉換爲二維numpy矩陣
- 14. 無法從二維陣列
- 15. 二維int陣列shuffle
- 16. C++二維char列陣
- 17. 字符串二維陣列
- 18. 二維陣列誤差
- 19. 二維陣列問題
- 20. 二維陣列幫助
- 21. 查找在二維陣列
- 22. 參考二維陣列
- 23. 二維陣列澄清
- 24. Typed二維指針陣列
- 25. Java:二維字符陣列
- 26. 樹從二維陣列PDO
- 27. LCS的二維陣列表
- 28. jquery的交陣列二維
- 29. 二維陣列卡住
- 30. 比較二維陣列
只是要清楚,你是說'的printf( 「%d」,引號[0])'和'的printf(」 %d「,標記)'給你不同的輸出? – Nishan 2011-04-12 07:38:36
是的,這就是我所說的。 – nobalG 2011-04-12 07:59:51
@Alfred它打印什麼? – anatolyg 2011-04-12 18:42:17