C 使用时参数的类型不兼容(矩阵*mtx)

C 使用时参数的类型不兼容(矩阵*mtx),c,function,matrix,C,Function,Matrix,IDK知道什么是错误的,但我得到了错误:main.c | 45 | error:symmetric(在printf中)参数1的类型不兼容 如果您可以修复它,请复制已修复的代码,谢谢!! 我认为错误在int main()中 #包括 #包括 类型定义结构 { int n; int m; int**mat; }基质; int对称(矩阵*mtx) { int i,j; 如果(mtx->n==mtx->m) { 对于(i=0;i n;i++) { 对于(j=0;jm;j++) { 如果(mtx->mat[

IDK知道什么是错误的,但我得到了错误:main.c | 45 | error:symmetric(在printf中)参数1的类型不兼容 如果您可以修复它,请复制已修复的代码,谢谢!! 我认为错误在int main()中

#包括
#包括
类型定义结构
{
int n;
int m;
int**mat;
}基质;
int对称(矩阵*mtx)
{
int i,j;
如果(mtx->n==mtx->m)
{
对于(i=0;i n;i++)
{
对于(j=0;jm;j++)
{
如果(mtx->mat[i][j]!=mtx->mat[j][i])
{
返回0;
}
}
}
返回1;
}
返回0;
}
int main()
{
矩阵m={
.m=3,
.n=3,
.mat={
{1, 4, 4},
{4, 1, 4},
{4, 4, 10}
}
};
printf(“此矩阵%s对称\n,对称(m)?“是”:“不是”);
返回0;
}

您创建了如下矩阵:

matrix m = {
但是你的函数需要一个
矩阵*

int symmetric(matrix* mtx)
因此,您需要传递指向矩阵的指针,而不是实际矩阵本身:

printf("This matrix %s symmetric\n", symmetric(&m)? "is" : "is not");

注意
&m
,其中
&
取它所应用的对象的地址,即
m
symmetric(m)
->
对称(&m)
结构矩阵{int n;int m;int mat[3][3];}您不能使用该符号初始化
int**
。已工作,但问题是此函数不仅应与[3][3]一起工作,还应与任意大小的n和m一起工作,所以@williampersellso您将需要使用不同的机制进行初始化。这是错误的一部分。中的**mat还有一个错误declarations@joesouaid同意——我的回答只针对您的问题所问的错误。威廉·珀塞尔(William Pursell)在关于矩阵创建的评论中指出的问题是另一个问题。同样,代码在整个矩阵上迭代,实际上它只需要考虑对角线的一侧上的值——对角线上的所有东西都是对称的,如果你在(0,2)中测试条目,则不需要测试(2,0)的条目。对于3x3矩阵来说这没什么大不了的,但是做两倍于你需要做的工作可以降低大型矩阵的速度。
printf("This matrix %s symmetric\n", symmetric(&m)? "is" : "is not");