#include #include /* Exempel på retur av pekare till dynamiskt fält */ /* Kopiera ett tvådimensionellt fält till ett nytt lika stort fält som skapas i funktionen. Returnera en referens till resultatet. */ double** kopieraMatris(double **m, int nr, int nk) { int rad; int kol; double **resultat; /* skapa resultatfältet */ resultat = (double **)malloc(sizeof(double *) * nr); /* kolumnvektorn */ for (rad = 0; rad < nr; rad++) resultat[rad] = (double *)malloc(sizeof(double) * nk); for (rad = 0; rad < nr; rad++) for (kol = 0; kol < nk; kol++) resultat[rad][kol] = m[rad][kol]; return resultat; } int main(void) { double rad1[] = { 1.0, 1.5, 2.0 }; /* denna läggs upp statiskt */ double rad2[] = { 7.3, 6.1, 5.4 }; double rad3[] = { 6.1, 3.2, 3.1 }; double *matris[] = { rad1, rad2, rad3 }; /* vektor med pekare till rader */ double **kopia; int i; int j; kopia = kopieraMatris(matris, 3, 3); for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { printf("%4.2f ", kopia[i][j]); } printf("\n"); } for (i = 0; i < 3; i++) free(kopia[i]); free(kopia); return 0; }