关于二维数组

时间:2011-04-12 06:17:24

标签: c multidimensional-array

如果我创建了一个类似的数组 int marks [4] [2]; 那么数组的名称必须给我第一个元素的地址,就像一维数组的情况一样,但事实并非如此? &安培;也
printf("%d",marks[0]); & printf("%d",marks);  产生相同的结果??????????

4 个答案:

答案 0 :(得分:2)

printf("%d",marks);

给出错误的格式说明符会导致未定义的行为marks导致指向1D数组的指针(即指针指向第一行的第一个元素)。

因此,应该使用打印指针的内容%p

printf("%p",marks);

似乎您正在尝试在0*0位置打印该值。所以 -

printf("%d",marks[0][0]);  // [m][n] is the way of accessing 2D array elements.

答案 1 :(得分: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

指向列表第一个元素的所有指针( 列表的第一个元素除外)。

答案 2 :(得分:0)

在C中,例如,一个二维数组被视为一维数组,其元素是一维数组。所以,如果你想得到你必须使用的任何元素的地址

的printf( “%8U \ n”,&安培;一个[i] [j]);

两个print语句都打印相同的结果,因为标记和标记[0]都指向二维数组的第一行的开头。

答案 3 :(得分:0)

当您以%d格式使用printf时,相应的参数(默认促销后)必须具有类型int。既然你在这两种情况下都违反了规则,那么任何事情都可能发生。

marks的类型为int[4][2],并且已衰减到int(*)[2],而不是int

marks[0]的类型为int[2],并且已衰减到int*,而不是int

(但我仍然感到惊讶,实际的实现会输出不同的地址。)