一道指针题目
定义一个整形二维数组并初始化,求该数组所有元素的和。要求分别用数组下表法,一级指针法,二级指针法实现。
我的代码如下,看下哪里有错,并且时不时符合后面的要求,我怕我没有理解它的要求:
#include <stdio.h>
int array_sum(int (*arr)[2]);
int point1(int *p);
int point2(int (*p)[2]);
int main()
{
int a[3][2]={{1,2},{3,4},{5,6}};
int sum=0;
sum=array_sum(a);
printf("用数组法和为%d\n",sum);
sum=point1(a[0]);
printf("用一级指针法和为%d\n",sum);
sum=point2(a);//编译器提示这里有错
printf("用二级指针法和为%d\n",sum);
return 1;
}
int array_sum(int (*arr)[2])
{
int i,j,sum=0;
for(i=0;i<3;i++)
for(j=0;j<2;j++)
sum+=arr[i][j];
return sum;
}
int point1(int *p)
{
int i,sum=0;
for(i=0;i<6;i++)
sum+=*p++;
return sum;
}
int point2(int (*p)[2])
{
int i,sum=0;
for(i=0;i<6;i++)
sum+=**p++;
return sum;
}
[解决办法]
#include <stdio.h>int array_sum(int (*arr)[2]);int point1(int *p);int point2(int (*p)[2]);int main(){ int a[3][2]={{1,2},{4,4},{5,6}}; int sum=0; sum=array_sum(a); printf("用数组法和为%d\n",sum); sum=point1(a[0]); printf("用一级指针法和为%d\n",sum); sum=point2(a); //编译器提示这里有错 printf("用二级指针法和为%d\n",sum); return 1;}int array_sum(int (*arr)[2]){ int i,j,sum=0; for(i=0;i<3;i++) for(j=0;j<2;j++) sum+=arr[i][j]; return sum;}int point1(int *p){ int i,sum=0; for(i=0;i<6;i++) sum+=*p++; return sum;}int point2(int (*p)[2]){ int i,sum=0,j; for(i=0;i<3;i++) for(j=0;j<2;j++) sum+=*(*(p+i)+j); return sum;}