题目
利用指针数组处理一个二维数组,要求求出二维数组所有元素的和。
思路
定义一个二维数组后,定义一个指针数组存放二维数组的行指针,也就是a[0]和a[1]这种(那为什么不放二维数组每个元素的地址?因为那样赋值太麻烦了(见代码2),这是种简便方法),然后通过行指针的行移动和列移动来访问数组中的每个元素,最后把数组的元素地址保存在指针数组最中,最后通过 * 取出并累加求得sum,也就是元素和。
代码1
#include<stdio.h>
int main()
{
int a[2][3] = {{1,2,3},{4,5,6}};
int * pa[2] = {a[0],a[1]} ; //对比代码2,这里存放行指针,而不是数组的每个元素地址
int sum = 0;
int i,j = 0;
for (i=0;i<2;i++)
{
for (j=0;j<3;j++)
{
sum += *(*(pa+i)+j); //对比代码2,这里就一行代码,十分简洁
}
}
printf("%d\n",sum);
return 0;
}
代码2
#include<stdio.h>
int main()
{
int a[2][3] = {{1, 2, 3},{4, 5, 6}};
int * pa[6];
int sum = 0;
int i, j, k = 0;
for (i=0;i<2;i++)
{
for (j=0;j<3;j++)
{
*(pa+k) = *(a+i)+j;
sum += *(*pa+k);
k++; //对比代码1,这里很复杂
}
}
printf("%d\n",sum);
return 0;
}
写代码过程最中遇到了一个困扰我很久的问题,最后解决了,具体见:一维数组和二维数组 *a+i 的区别