0
3 개의 행렬, 두 개의 행렬 및 결과 행렬을 전달하여 두 행렬을 더하는 함수를 작성하려고합니다. 구조체를 가진 행렬을 나타냅니다. 여기 내 코드가구조체에 대한 포인터를 C의 함수에 전달
#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을 출력합니다. "결과"의 열과 행을 올바르게 인쇄 할 수 있지만 데이터는 인쇄 할 수 없습니다. 누구든지 도와 줄 수 있습니까? 미리 감사드립니다.
'data'는 배열 포인터 또는 포인터 포인터가 아니므로'double *'입니다. 따라서 두 개의 인덱스를 사용할 수 없습니다. 대신에 ...'-> data [ii * m1-> columns + jj]'를 사용해야합니다. –
사실. 나는 고칠 것이다. –
도와 주셔서 감사합니다. 지금 행과 열 수표를 추가 할 것입니다. 그게 어려운 부분이기 때문에 먼저 포인터 작업을 먼저하고 싶었습니다. – Elena