Pagina 1 di 1
ritonare una matrice!?!?
Inviato: sab 18 nov 2006, 11:12
da Absolut
In C++ una funzione mi genera una matrice 2 x 2, e la chiamo da lmain!?
come fare per far ritornare la matrice al main!?
coem si ritorna una matrice?
thanks!
Inviato: sab 18 nov 2006, 11:47
da airex
ritorna un puntatore alla matrice oppure usa un altro metodo, qualcosa del tipo:
Codice: Seleziona tutto
void tua_funz(int **a) {
....
}
void main(...) {
...
int matr[2][2];
....
tua_funz(matr);
....
...
}
Re: ritonare una matrice!?!?
Inviato: sab 18 nov 2006, 12:07
da elettronicha
slackvitto ha scritto:In C++ una funzione mi genera una matrice 2 x 2, e la chiamo da lmain!?
come fare per far ritornare la matrice al main!?
coem si ritorna una matrice?
thanks!
Proprio come un vettore o una stringa di caratteri, col puntatore. Prova a pensare a tutte le funzioni che modificano stringhe che conosci.

Inviato: sab 18 nov 2006, 14:44
da dapuzz
occhio che puoi ritornare solo una matrice già allocata, cioè non puoi fare una funzione tipo **crea_matrice(x,y). L'allocazione va fatta per forza di cosa nel main

Spero che qualcuno mi smentisca

Inviato: sab 18 nov 2006, 14:53
da Simone_R
dapuzz ha scritto:occhio che puoi ritornare solo una matrice già allocata, cioè non puoi fare una funzione tipo **crea_matrice(x,y). L'allocazione va fatta per forza di cosa nel main

Spero che qualcuno mi smentisca

si puoi.
nulla di più semplice
Codice: Seleziona tutto
tipo **crea_matrice(x,y)
{
tipo** matrice = new tipo*[x]
for ( int i = 0 ; i < x ; i++ )
{
matrice[i] = new tipo[y] ;
}
int a , b ;
// riempi la matrice .....
matrice[a][b] = quello che vuoi;
return matrice ;
}
Inviato: sab 18 nov 2006, 15:06
da elettronicha
In realtà i puntatori se li si sanno usare offrono un'ampia libertà, più di quanta possano far pensare coloro che "spacciano" (detto simpaticamente) linguaggi che non ne fanno uso. Il problema reale è la loro corretta gestione e la loro allocazione/deallocazione, che spesso porta a impacci o perdite di tempo. Io non sono un genio dei puntatori e ammetto che possono far sudare a volte.

Inviato: sab 18 nov 2006, 19:45
da Paoletta
dapuzz ha scritto:occhio che puoi ritornare solo una matrice già allocata, cioè non puoi fare una funzione tipo **crea_matrice(x,y). L'allocazione va fatta per forza di cosa nel main

Spero che qualcuno mi smentisca

Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
#define NUM 3
int ** func(void){
int **mat;int i,j;
mat=(int **)malloc(NUM*sizeof(int*));
for(i=0;i<NUM;i++)
mat[i]=malloc(NUM*sizeof(int));
for(i=0;i<NUM;i++)
for(j=0;j<NUM;j++)
mat[i][j]=i;
return mat;
}
int main(void){
int** punt;int i,j;
punt=func();
for(i=0;i<NUM;i++)
for(j=0;j<NUM;j++)
printf("%d \n",punt[i][j]);
return 0;
}
siccome questo è possibile in C, lo è pure in C++

Inviato: sab 18 nov 2006, 19:47
da Paoletta
oooops, non avevo visto il post di simone! chiedo venia e lascio il codice, magari se serve a qualcuno...fa in C la stessa cosa che fa simone in C++