Oppure

Loading
30/10/10 15:52
Giarados
Come si dichiarano? E come si fa riferimento agli elementi contenuti?

So dal mio libro sul C che un array dinamico si dichiara tramite un puntatore attribuendogli l'indirizzo che la funzione malloc restituisce (NULL in caso di errore), si ridimensiona tramite realloc e si libera tramite free.

Purtroppo il mio libro non tratta le matrici multidimensionali che sono quelle che a me servono maggiormente per il momento.

aaa
30/10/10 16:55
lumo
considera la matrice come un array di array
aaa
30/10/10 17:08
hackersitiz
Infatti sono array di array, ma sono detti vettori multidimensionali...
Ti faccio un'esempio:
#include <stdio.h>
int main(void)
{
     int vettore[10][10];
     return 0;
}

Ecco questo è un vettore comunque ti passo una guida
elite.polito.it/files/courses/06AZN/lucidi/C/…

buona fortuna
aaa
30/10/10 19:58
pierotofy
Brr... "matrici", ma che siamo, matematici?

Si chiamano array bidimensionali (non vettori, i vettori sono quelli della fisica o quelli che vengono istanziati con il template vector).

L'esempio di hackersitiz è un esempio di allocazione statica, a noi interessa quella dinamica:

int numRows = 10;
int numCols = 10;
int **arr = (int **) malloc(numRows *sizeof(int));

int c;
for(c=0;c< numRows ;c++)
  arr[c] = (int *) malloc(numCols*sizeof(int));
Ultima modifica effettuata da pierotofy 30/10/10 19:59
Il mio blog: piero.dev
30/10/10 20:17
TheKaneB
mi ha detto mio "cuggino" che se fai così:

int sizeX = 10;
int sizeY = 10;
int * matrice = malloc(sizeof(*matrice) * sizeX * sizeY);


diminuisci drasticamente la frammentazione della Ram e l'overhead delle allocazioni

e per accedervi poi, devi fare così:
// al posto di matrice[x][y] = 42;
matrice[x + y*sizeX] = 42;


:k:
aaa
31/10/10 3:13
pierotofy
Postato originariamente da TheKaneB:

e per accedervi poi, devi fare così:
// al posto di matrice[x][y] = 42;
matrice[x + y*sizeX] = 42;




L'inizializzazione è più veloce, ma l'accesso diventa più lento (per la moltiplicazione).
Il mio blog: piero.dev
31/10/10 4:16
TheKaneB
Postato originariamente da pierotofy:

Postato originariamente da TheKaneB:

e per accedervi poi, devi fare così:
// al posto di matrice[x][y] = 42;
matrice[x + y*sizeX] = 42;




L'inizializzazione è più veloce, ma l'accesso diventa più lento (per la moltiplicazione).


l'accesso random si, ma l'accesso sequenziale è più veloce, perchè non rompi le linee della cache e viene massimizzato dal prefetch delle ram dinamiche... ovviamente tutto ha dei lati positivi e negativi. Comunque considera che una moltiplicazione impiega mediamente 5 cicli di clock, che potrebbe corrispondere a un singolo ciclo di Ram su alcuni sistemi moderni. Questa tecnica la uso quando programmo sulle console e su sistemi con poca memoria.
aaa
31/10/10 14:14
Il Totem
Postato originariamente da pierotofy:

Brr... "matrici", ma che siamo, matematici?

Si chiamano array bidimensionali (non vettori, i vettori sono quelli della fisica o quelli che vengono istanziati con il template vector).


Va de retro! Ti hanno fatto il lavaggio del cervello in Minnesota! :rotfl:
aaa