我想知道为什么我不能得到函数中的值,它总是导致分段错误...'
void multiply(int M, int N, int K, int **matrixA, int **matrixB, int **matrixC){
for (int i = 0; i < M; i++){
for (int j = 0; j < K; j++){
int sum = 0;
for (int k = 0; k < N; k++){
sum += (*(*(matrixA + j) + k)) * (*(*(matrixB + k) + j));
}
*(*(matrixC + i) + j) = sum;
}
}
}
int main(){
int M, N, K;
scanf("%d%d%d", &M, &N, &K);
int matrixA[M][N];
int matrixB[N][K];
int matrixC[M][K];
for(int i=0; i<M; i++){
for(int j=0; j<N; j++){
scanf("%d", matrixA[i]+j);
}
}
for(int i=0; i<N; i++){
for(int j=0; j<K; j++){
scanf("%d", matrixB[i]+j);
}
}
multiply(M, N, K, (int **)matrixA, (int **)matrixB, (int **)matrixC);
for(int i=0; i<M; i++){
for(int j=0; j<K; j++){
printf("%d ", matrixC[i][j]);
}
printf("\n");
}
return 0;
}
`
我想打印出结果“matrixC”,但是在函数中,这会导致分段错误。我试了几次,似乎会错过双指针下的指针地址。
1条答案
按热度按时间iszxjhcz1#
将函数
multiply
的原型更改为:让你的生活变得更简单,就像这样(函数体倍增):
此行有错误
其已被校正为
不需要var
sum
,因此选择退出。基于您在下面的评论
请考虑以下代码:
可能的输出:
正如你所看到的,很好地打包成连续的整数(基本上是一个整数数组--但这并不保证)。
现在看看这个:
可能的输出:
现在,这看起来(危险地)丑陋。
指针指向指针意味着另一个地址的地址,而数组是一个连续的类型块(例如,你可以取第一个元素的地址,如果数组衰减为指针,就可以这样做)。
您必须为编译器提供足够的信息,例如:
另请参阅:https://en.cppreference.com/w/c/language/array#Multidimensional_arrays