【发布时间】:2012-01-29 08:47:38
【问题描述】:
我正在学习指针,现在卡了一个小时,使用这段代码,
#include <stdio.h>
int determinant(int **mat) /* int mat[3][3] works fine.. int *mat[3] doesn't.. neither does int *mat[] */
{
int det;
int a=*(*(mat+0)+0); // printf("\n%d",a);
int b=*(*(mat+0)+1); // printf("\n%d",b);
int c=*(*(mat+0)+2); // printf("\n%d",c);
int d=*(*(mat+1)+0); // printf("\n%d",d);
int e=*(*(mat+1)+1); // printf("\n%d",e);
int f=*(*(mat+1)+2); // printf("\n%d",f);
int g=*(*(mat+2)+0); // printf("\n%d",g);
int h=*(*(mat+2)+1); // printf("\n%d",h);
int i=*(*(mat+2)+2); // printf("\n%d",i);
det = a*(e*i-h*f) - b*(d*i-g*f) + c*(d*h-e*g);
return det;
}
int main()
{
int mat[3][3];
int i,j;
printf("Enter the 3 X 3 matrix:\n\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
scanf("%d",*(mat+i)+j);
}
}
printf("\nThe determinant of the given 3 X 3 matrix is %d",determinant(mat));
return 0;
}
我认为函数调用没有任何问题。也许问题在于接受论点。 Idk,mat 不是指向一维数组的指针,它又是指向数组元素的指针,使mat 成为指向指针的指针?
当我在某些地方打印一些文本(只是为了检查)时,我发现执行一直持续到函数中的int det 之后,并且程序在下一步中崩溃。
mat [3][3] 效果很好,但我想在那里使用一些 *,因为正如我所说,我正在“学习”..
请帮忙! 谢谢:)
【问题讨论】:
-
指向指针的指针与二维数组不同,编译器不会以相同的方式对它们进行索引。
标签: c arrays function pointers multidimensional-array