第一次写的代码:
//9-3求二维数组每行元素的平均值(指针)
#include<stdio.h>
int main()
{
int a[][4] = {1,2,3,4,5,9,1,0,5,6,7,8,2,4,6,9,6,3,7,9};
int *p = &a[0][0];
printf("\n\n列指针:\n");
for(int i=0; i<4; i++)
{
for(int j=0; j<5; j++)
{
printf("%3d ", *((p+i)+j));// (p+i):%p\t
}
printf("\n");
}
return 0;
}
结果:
明显不对……
原因分析:
由于我的代码中,声明时,二维数组的列数为4, 一共输入了20个数字,所以应该是5行4列,所以在for循环中,i应为 for(int i=0; i<5; i++) 内层循环应该为 for(int j=0; j<4; j++)。当行列不匹配时,势必会出现指针p指向空区域的情况。
下面是第一种正确的遍历方式: