Matrici allocate dinamicamente linguaggio c

Stato
Discussione chiusa ad ulteriori risposte.

Frank2000

Nuovo Utente
26
0
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]
 

ilfe98

Moderatore
Staff Forum
Utente Èlite
3,052
1,278
CPU
Intel i7 7700K
Dissipatore
Bequiet Dark rock pro 4
Scheda Madre
Msi pc mate z270
HDD
Seagate barracuda 1tb, silicon power NVME 500gb
RAM
Patriot viper steel 3733Mhz
GPU
Inno 3d gtx 1080 herculez design
Monitor
Asus mg279q
PSU
Corsair HX750
Case
Itek lunar 23
Net
Tiscali ftth
OS
windows 10,mint,debian,Arch linux
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[][].
 

ilfe98

Moderatore
Staff Forum
Utente Èlite
3,052
1,278
CPU
Intel i7 7700K
Dissipatore
Bequiet Dark rock pro 4
Scheda Madre
Msi pc mate z270
HDD
Seagate barracuda 1tb, silicon power NVME 500gb
RAM
Patriot viper steel 3733Mhz
GPU
Inno 3d gtx 1080 herculez design
Monitor
Asus mg279q
PSU
Corsair HX750
Case
Itek lunar 23
Net
Tiscali ftth
OS
windows 10,mint,debian,Arch linux
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
 
  • Mi piace
Reazioni: Andretti60

Andretti60

Utente Èlite
6,440
5,091
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.

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili