gpt4 book ai didi

c - 将结构体指针传递给 C 中的函数

转载 作者:行者123 更新时间:2023-11-30 17:53:19 28 4
gpt4 key购买 nike

我正在尝试编写一个函数,通过传入三个矩阵(要添加的两个矩阵和结果矩阵)来添加两个矩阵。我用一个结构来表示一个矩阵。这是我的代码

#include <stdio.h>
#include <stdlib.h>

typedef struct{
int rows;
int columns;
double *data;
}Mat;

int Add(Mat *m1, Mat *m2, Mat **result);

int main(){
Mat m1,m2;
Mat *result = NULL;

m1.rows=2;
m1.columns=2;
double temp1[2][2] = {{1,2},{3,4}};
m1.data = &temp1[0][0];

m2.rows = 2;
m2.columns = 2;
double temp2[2][2] = {{1,1},{1,1}};
m2.data = &temp2[0][0];

Add(&m1,&m2,&result);
int ii,jj;
printf("\nresult\n");
for(ii=0;ii<2;ii++){
for(jj=0;jj<2;jj++){
printf("%f ",*result->data++);
}
printf("\n");
}
printf("%d\n ",result->columns);

return 0;
}


int Add(Mat *m1, Mat *m2, Mat **result)
{
int ii,jj;
double new[m1->rows][m1->columns];
int mat_size = (m1->rows)*(m1->columns);
Mat *temp = malloc(sizeof(int)*2+sizeof(double)*mat_size);
temp->rows = 2;
temp->columns = 2;

for(ii=0;ii<(m1->rows);ii++){
for(jj=0; jj<(m1->columns);jj++){
new[ii][jj] = *(m1->data++) + *(m2->data++);
}
}
temp->data = &new[0][0];
*result = temp;

}

当我尝试打印结果矩阵时,我遇到的问题是在主函数的末尾。它只打印 0。我能够正确打印“结果”的列和行,但不能正确打印数据。有人可以帮忙吗?提前致谢

最佳答案

您的 Add 函数中存在几个基本错误。这是更正后的版本。

void Add(Mat *m1, Mat *m2, Mat **result)
{
int ii,jj;
int mat_size = (m1->rows)*(m1->columns);
Mat *temp = malloc(sizeof(Mat)); /* Allocate the matrix header */
temp->rows = m1->rows;
temp->columns = m1->columns;
temp->data = calloc(mat_size, sizeof(double)); /* Allocate the matrix data */

for(ii=0; ii<m1->rows; ii++) {
int row = ii*m1->columns;
for(jj=0; jj<m1->columns; jj++)
temp->data[row + jj] = m1->data[row + jj] + m2->data[row + jj];
/* or something like that*/
}
/* In any case, incrementing the data pointer is wrong */

*result = temp;
}

但是仍然缺少一些东西。没有健全性检查,即矩阵维度是否兼容,并且没有检查分配错误。

关于c - 将结构体指针传递给 C 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15668864/

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