【发布时间】:2014-08-13 05:19:45
【问题描述】:
我正在尝试使用相同的整数接受和打印二维数组,让我们采用 i 和 j 但我没有得到预期的输出。我正在使用 *(a+i) 打印,但它似乎打印地址!
有人能解释一下为什么会这样吗?
#include<stdio.h>
int main()
{
int a[3][4];
int i,j,k,l;
printf("enter element\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
scanf("%d",&a[i][j]);
}
printf("#####################\n");
for(i=0;i<12;i++)
{
printf("%d\n",*(a+i)); // what is *(a+i)? is it a[i]?
} // how will it print all address??
}
【问题讨论】:
-
*(a+i)根据定义确实与a[i]相同。它是数组a的第ith 元素,它又是一个4 个整数的一维数组。在大多数情况下,数组名称衰减为指向其第一个元素的指针。这就是你最终打印地址的方式。除此之外,还有大量缓冲区溢出。 -
您的
scanf循环超出范围。因此,您的程序将表现出未定义的行为,无论对指针和二维数组有什么更有用的答案。 -
您将数组的边界留在循环/scanf 中。不知道你这样做是不是故意玩溢出。
-
另外请注意,您真的根本没有二维数组。
a[1][4]表示它是一个 1 x 4 数组,几乎是一维的。
标签: c pointers multidimensional-array