gpt4 book ai didi

C-这段代码有什么问题?我尝试在 func 中将一个矩阵乘以另一个矩阵并获得新矩阵,但出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 01:46:01 25 4
gpt4 key购买 nike

这是我正在处理的程序。任务是将 2 个矩阵相乘。矩阵 A 中的列数与矩阵 B 中的行数相同。我让用户可以选择插入两个矩阵包含的内容。这是我的代码:

#include <stdio.h>
void multiplyMat(int n,int p,int c,int m,int d,int q,int k,int **multiply,
int **first,int **second);
int main()
{
int m, n, p, q, c, d, k;
int first[10][10], second[10][10], multiply[10][10];

printf("Enter number of rows and columns of first matrix\n");
scanf("%d%d", &m, &n);
printf("Enter elements of first matrix\n");

for (c = 0; c < m; c++)
for (d = 0; d < n; d++)
scanf("%d", &first[c][d]);

printf("Enter number of rows and columns of second matrix\n");
scanf("%d%d", &p, &q);

printf("Enter elements of second matrix\n");

for (c = 0; c < p; c++)
for (d = 0; d < q; d++)
scanf("%d", &second[c][d]);

multiplyMat(n,p,c,m,d,q,k,multiply,first,second);
printf("Product of the matrices:\n");

for (c = 0; c < m; c++) {
for (d = 0; d < q; d++)
printf("%d\t", multiply[c][d]);
printf("\n");
}
return 0;
}

void multiplyMat(int n,int p,int c,int m,int d,int q,int k,int **multiply,
int **first,int **second){
int sum=0;
if (n == p){
for (c = 0; c < m; c++) {
for (d = 0; d < q; d++) {
for (k = 0; k < p; k++) {
sum = sum + first[c][k]*second[k][d];
}

multiply[c][d] = sum;
sum = 0;
}
}
}
else
printf("The matrices can't be multiplied with each other.\n");

}

我得到了“段错误”。当代码进入“sum = sum + first[c][k]*second[k][d]”时发生我做了什么导致它?可能是因为我使用了错误的指针定义。

最佳答案

int **multiply 是“指向 int 指针的指针”,也被解释为“指向 int 指针数组的指针”。

所以 int **multiplyint *multiply[] 是一样的,你可以使用 i= multiply[1][3]; 编译器将取消引用 multiply,添加 1 个指针的大小,然后取消引用该元素并添加 3 个 int 的大小,然后获取该 int 并将其分配给 i .

但是你传递了一个二维数组。二维数组不是包含指向行的指针的列数组。它只是一个内存块,其中有列乘以一行,一个接一个地整齐排列。

现在你创建一个函数来做乘法。但是该函数不知道一行有多少列。因此编译器无法将 multiply[1][2] 计算为 multiply[10][10] 第二行的第三个元素。

要实现你想要的,有三种可能性:

  1. 在行大小的函数中声明矩阵的大小,例如乘[][10]。这允许编译器在您的函数内部进行地址计算(您仍然必须告诉它有多少行)

  2. 使用现代编译器,您可以动态指定数组大小:

    f(int rows, int cols, int a[rows][cols])
  3. 自己计算地址。 (我不会讨论这个选项;我希望你有一个现代编译器)。

关于C-这段代码有什么问题?我尝试在 func 中将一个矩阵乘以另一个矩阵并获得新矩阵,但出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53729144/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com