我在编译期间没有收到任何错误,但是,当我执行它时,程序崩溃了。我推断错误是*mat3[x][y]=mat1[x][y]+mat2[x][y]
的行。这里发生了什么,我该如何解决它?
typedef float matrice[255][255];
void Caricamento(matrice *, int , int , int );
void Molt(matrice *, int , int ); //Prototipi
void Somma(matrice , matrice , matrice *, int , int );
void Stampa(matrice , int , int );
int main()
{
matrice A, B, C;
int r, c;
printf ("Inserisci la dimensione delle matrici A e B per il calcolo 2*A+B:\n");
scanf ("%d", &r);
scanf ("%d", &c);
Caricamento(&A, r, c, 1);
Caricamento(&A, r, c, 2);
Molt(&A, r, c);
Somma(A, B, &C, r, c);
Stampa(C, r, c);
return 0;
}
void Molt(matrice *mat1, int x, int y) //Procedura moltiplicazione
{
int xi=0, yi=0; //Indici
while(xi<x)
{
yi=0; //Reset indice
while (yi<y)
{
*mat1[x][y]*=2; //Moltiplicazione
yi++;
}
xi++;
}
}
void Somma(matrice mat1, matrice mat2, matrice *mat3, int x, int y) //Procedura somma
{
int xi=0, yi=0; //Indici
while(xi<x)
{
yi=0; //Reset indice
while (yi<y)
{
*mat3[x][y]=mat1[x][y]+mat2[x][y]; //Somma
yi++;
}
xi++;
}
}
答案 0 :(得分:4)
这是operator precedence的问题。表达式*mat1[x][y]*=2
被解析为*(mat1[x][y])*=2
。
改为使用(*mat1)[x][y]*=2
。
或者依赖于数组自然衰变到指向第一个元素的指针,并且无论如何都作为指针传递。例如,
void Molt(matrice mat1, int x, int y) //Procedura moltiplicazione
{
...
mat1[x][y]*=2;
...
}
答案 1 :(得分:1)
将是
(*mat1)[x][y]*=2;
同样适用于mat3
的其他功能。因为数组下标的优先级高于*
取消引用。
此处matrice*
的类型为float (*)[][]
,因此您需要先通过降级来获取二维数组。