题目描述
从键盘输入12个整数,存入到3行4列的二维数组中,求和并输出数组及和的结果
输入
连续输入12个数据
输出
输出三行四列的二维数组及和的结果
样例输入
1 2 3 4 5 6 7 8 3 4 5 6
样例输出
1 2 3 4 5 6 7 8 3 4 5 6 54
#include"stdio.h"
#define M 3
#define N 4
main()
{
int a[M][N];
int i,*p,s=0,k;
p=a[0]; //指针P指向二维数组的首元素
for(i=0;i<M*N;i++,p++) //输入数据存入二维数组
{
scanf("%d",p);
s=s+*p;
}
k=0;
//利用指针进行循环,从首单元地址到末单元地址
for(p=&a[0][0];p<&a[M-1][N-1]+1;p++)
{
printf("%d ",*p);
k++;
if (k %4 ==0 ) //每4个数据换一行
putchar('\n');
}
printf("%d",s);
}
for(p=&a[0][0];p<&a[M-1][N-1]+1;p++) { printf("%d ",*p); k++; if (k %4 ==0 ) //每4个数据换一行 putchar('\n'); }
注意:&a[M-1][N-1]+1是一个指针,表二维数组a的最后一个元素的下一个元素,如果直接将其写成&a[M][N]那么循环将会从二维数组的最后一个元素开始而不是最后一个元素的前一个元素开始。这可能导致访问数组使发生越界的情况
&a[M][N]实际上是指向a的一个地址,而&a[M-1][N-1]+1则表示最后一个元素的下一个元素
这样就可以确保循环从数组的最后一个元素开始。