如果我已经建立像 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