Matrici allocate dinamicamente linguaggio c

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.
Perfetto questa è la struttura di un doppio puntatore, adesso scrivendo la matrice come ti ho detto:

|0 1 2|
|3 4 5|
|6 7 8|
Riesci a trovare una formula da mettere inserire tra le quadre per accedere al valore da te cercato?
non saprei...sapevo che per accedere a un valore si utilizzasse matrice[indice riga][indice colonna]
 
non saprei...sapevo che per accedere a un valore si utilizzasse matrice[indice riga][indice colonna]
Come si traduce questo in algebra dei puntatori? Utilizzando l'operatore di dereferenziazione, che guarda caso ancora una volta è ancora il *
quindi devi fare printf("................::",*matrice[j]); ma è molto scomodo in quanto dovresti aggiorare il puntatore come *matrice++; e alla lunga il codice diventa illegibile.Quindi usa quel metodo che volevi usare matrice[][].
 
Inoltre metti la matrice come ti ha consigliato andretti. in una struct
C:
typedef struct matrice{
size_t rows;
size_t cols;
double *data;
}matrice;
In verità ti consiglio di usare array monodimensionali per gestire le matrici prendendo come base la struct di ora fai
C:
matrice *m; //qui devi allocare spazio anche per una struct.
m->rows=numero righe da input
m->cols=numero di colonne da input
m.>data=malloc(m->rows*m->cols*sizeof(double));
in questo modo hai creato un array molto lungo dove per accedere ai dati farai
C:
for(I=0....................)
for(j=0...................)
m->data[i*m->cols+j]
trattando la matrice come un array.

ma perchè quando si dichiara la matrice non si mettono le quadre ma solo **matrice?
Perché in c non è permesso, si utilizzano i doppi puntatori e successivamente potresti accedere ai dati in quel modo. In c puoi usare le quadre nella dichiarazione solo nel momento in cui la dimensione è nota a priori
Detto questo io sono distrutto quindi se hai ancora dubbi temo dovrai aspettare fino a domani
 
Lavorando con le struct ricordiamo che per accedere agli elementi ci sono due operatori:
il punto (.) se la variabile rappresenta una struct
la freccia (->) se la variabile e' un puntatore a una struttura.
Passando la struttura a una funzione, sempre meglio passarne il puntatore (cosi' almeno si evitano problemi di compatibilita')
Per esempio:
C:
Matrice m;
Matrice *pm;

pm = &m;

// queste due istruzioni sono equivalent:
m.rows = 10;
pm->rows = 10;
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top