讨论/综合讨论/请问一下我这个简单的C语言指针函数哪里错了?/
请问一下我这个简单的C语言指针函数哪里错了?

二级指针是怎么用的?

#include <stdio.h>
//start
float matrix(float *a[3], int n)
{     int i, j;
      float sum=0;
      for (i=0; i<3; i++)
         for (j=0; j<3; j++)
         {
              if (i==j)
                   sum=sum+*(*(a+i)+j);
              if (j==2-i && i!=j)
                   sum=sum+*(*a+i)+2-i);
         }
      return sum;
}
void main()
{
      int i, j;
      float a[3][3];
      printf("输入3×3数组\n");
      for (i=0; i<3; i++)
         for (j=0; j<3; j++)
              scanf("%f", &a[i][j]);
      printf("sum=%0.2f \n",matrix(a,3));
}
//end
展开讨论

编译提示:note: expected ‘float **’ but argument is of type ‘float (*)[3]’
float matrix(float *a[3], int n)
函数想要一个float**的参数传入(退化为指针,已经丢失了维度信息),但是传入的类型是float (*)[3]。
把函数参数改为matrix(float (*a)[3],int n)才对。
原来参数float *a[3]时,a是float **类型,语句sum=sum+*(*(a+i)+j);中a+i就没有意义了(a+i表示跨过i个float*类型大小(存储指针占的大小)),但你本来是想让它指向第i行。

改为matrix(float (*a)[3],int n),因为[]比*的优先级高,所以加括号。这样,float (*a)[3]表示a是个指针,指向了一个类型,这个类型是含有3个float数据,如果a+1得到的就是跨过3个float大小内存区域后的地址。

2
展开全部 4 讨论