struktura definiujaca macierz

0

Czesc,
mam zadanie w ktorym mam zdefiniowac strukture bedaca reprezentacja macierzy dwuwymiarowej.Dodatkowo musze zdefiniowac funkcje ktora bedzie tworzyla pusta macierz o zadanym rozmiarze oraz usuwanie macierzy z pamieci. Aktualnie uzyskalem cos takiego :
#include "stdafx.h"
#include "stdlib.h"

typedef struct macierz{
int wiersze, kolumny;
double *wskaznik;
}m1,m2;
m1 p;

m1 utworzmacierz(m1 *ptr)
{
int m, n;
m = ptr->wiersze;
n = ptr->kolumny;

m1 *nptr = (m1*)malloc(sizeof(m1));
nptr->wskaznik = (double*)calloc((m*n), sizeof(double));

ptr = nptr;
return *ptr;

}
void usunMacierz(){
free(utworzmacierz);

}

int _tmain(int argc, _TCHAR* argv[])
{
m1 p = (m1)malloc(sizeof(m1));
p->wiersze = 2;
p->kolumny = 2;
utworzmacierz(p);
usunMacierz();

return 0;

}
Jest to jeden z pierwszych programow jakie pisze i czy to co napisalem w ogole ma jakis sens ?

2

http://ideone.com/RyHWRr

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

typedef struct 
  {
   size_t rows,cols;
   double *mat;
  } matrix;

matrix matrixAlloc(size_t rows,size_t cols)
  {
   matrix m;
   m.rows=rows;
   m.cols=cols;
   m.mat=(double*)malloc(rows*cols*sizeof(double));
   return m;
  }

matrix matrixClone(matrix m)
  {
   matrix ret=matrixAlloc(m.rows,m.cols);
   memcpy(ret.mat,m.mat,m.rows*m.cols*sizeof(double));
   return ret;
  }

void matrixShow(matrix m)
  {
   size_t i,y,x;
   for(i=y=0;y<m.rows;++y,printf("\n")) for(x=0;x<m.cols;++x,++i) printf(" %f"+!x,m.mat[i]);
  }

double *matrixData(matrix m,size_t i) /* było ati() - w postach niżej było pytanie co do ati() */
  {
   return m.mat+i;
  }

double *matrixCell(matrix m,size_t y,size_t x)
  {
   return matrixData(m,y*m.cols+x);
  }

void matrixRelease(matrix m)
  {
   free(m.mat);
  }

int main()
  {
   size_t i;
   matrix m1=matrixAlloc(2,5);
   matrix m2=matrixAlloc(3,3);
   for(i=0;i<9;++i) *(matrixData(m2,i))=i; /* było ati() - w postach niżej było pytanie co do ati() */
   matrixShow(m2);
   matrixRelease(m2);
   matrixRelease(m1);
   return 0;
  }
0

dzieki :), mam kilka pytan, a mianowicie co powoduje *(ati(m2,i))=i; oraz za co odpowiada ta funkcja :
double *ati(matrix m,size_t i)
{
return m.mat+i;
}

0

Ad 1.

double *ptr=ati(m2,i); *ptr=i;

Ad 2.

return &m.mat[i];
0

Dzieki za pomoc :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1