C语言:*a[]和(*a)[]的区别

#include <stdio.h>
float matrix(float *a[3], int n)
{
float sum = 0;
int i,j;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++){
if(i == j || (i + j == n - 1))
{
sum+=a[i][j];
}
}
return sum;
}
int main()
{
int i,j;
float a[3][3],(*p)[3];

for(i = 0; i < 3; i++)
for(j = 0; j < 3; j++){
scanf("%f",&a[i][j]);

}
p = a;

printf("sum=%0.2f \n", matrix(p,3));
return 0;
}
如上,程序在p=a处或printf("sum=%0.2f \n", matrix(p,3));处会报错,但是若在开头将*a[]改为(*a)[],程序正常运行,这是为什么?

如果是 *a[] 表示的是指针数组
float *a[3] 是三个不同的指针
而float (*a)[3] 则是数组指针, a是一个独立的指针,指向一行3个float的数组。

传递的参数p是(*p)[3]; 所以 需要类型匹配才可以正常工作。
温馨提示:答案为网友推荐,仅供参考