gpt4 book ai didi

c - C中两个二维数组相加

转载 作者:行者123 更新时间:2023-11-30 15:41:56 30 4
gpt4 key购买 nike

我开始于:

 typedef struct
{
int rows, cols;
int **element;
}Matrix;

我创建了两个矩阵:

void matrixInit (Matrix *m, int r, int c )
{
m->element = malloc(sizeof(int*)*r);
for (int j=0;j<3;++j)
{
m->element[j] = malloc(sizeof(int)*c);
}
m->rows=r;
m->cols=c;
}
Matrix m1,m2,m3;
matrixInit(&m1,3,3);
for (k=0; k<m1.cols*m1.rows; k++)
{
m1.element[k]=q;
q++;
}

然后我使用创建的复制函数做矩阵2

void matrixCopy (Matrix *m, Matrix *n )
{
int r=n->rows,c=n->cols,k;
for (k=0; k<r*c; k++)
{
m->element[k]=n->element[k];
}
}

matrixInit(&m2, 3, 3);
matrixCopy(&m2, &m1);

然后我创建第三个作为加法的结果

matrixInit(&m3, 3, 3);

然后我做加法。这就是我的问题所在。我似乎无法让它发挥作用。

我的函数代码如下:(原型(prototype)必须保持不变)

Matrix* matrixAdd (Matrix *m, Matrix *n )
{
int q;
for (q=0; q<m->rows*m->cols; q++)
{
m->element[q]=*m->element[q]+*n->element[q];
}
return m;
}
m3=*matrixAdd(&m1, &m2);

最佳答案

matrixAdd函数应如下所示:* on 元素将仅引用第一个值。

Matrix* matrixAdd (Matrix *m, Matrix *n )
{
int q;
int r;
for(r = 0; r<m->rows; ++r)
for (q=0; q<m->cols; q++)
{
m->element[r][q]=m->element[r][q]+n->element[r][q];
}

return m;
}

这样会更容易理解。

就你而言,

   *m->element[q] = *m->element[q]+*n->element[q];

会导致你遇到问题,因为你已经将 r 指针分配给 int * (因此 r 连续元素)并且在每个指针处分配了 c 个整数。

因此,如果 q 超出 r,则行为未定义。

关于c - C中两个二维数组相加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20391235/

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