将指向结构的指针传递给C中的函数

时间:2013-03-27 20:33:41

标签: c pointers struct

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

#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。我能够正确打印“结果”的列和行但不能打印数据。有人可以帮忙吗?提前致谢

1 个答案:

答案 0 :(得分:0)

您的添加功能有几个基本错误。这是一个更正版本。

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;
}

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