[C/C++]Why u not work?
#21
Inviato 29 settembre 2011 - 22:17
**v[i]=malloc(a*sizeof(int**));
*v[i][j]=malloc(b*sizeof(int*));
v[i][j][k]=malloc(c*sizeof(int));
?
Attenti al cane
#22
Inviato 29 settembre 2011 - 22:23
Niente, sono andato, a domani
#23
Inviato 29 settembre 2011 - 22:30
Attenti al cane
#24
Inviato 29 settembre 2011 - 22:55
El sueño de la razón produce monstruos
#25
Inviato 29 settembre 2011 - 22:58
Gente che sa fare queste torture ha potuto scrivere in C il Java.[/quote]
E ora c'e gente che riscrive il python in python e in java scrive scala.
cazzo.
Infatti ho specificato nel 2011.
In che anno e' nato java?
e perche' e' stato scritto in C?
E scala in che anno e' nato?
e perche' e' stato scritto in java?
#26
Inviato 29 settembre 2011 - 22:59
cristo, il deitel & deitel...aldin, se vuoi imparare a programmare bene in C ti consiglio questo libro
ancora e' usato dopo 10 anni che l'ho usato io?
speravo l'avessero bruciato, soprattutto nella miserrima traduzione italiana che per fortuna non ho mai comprato.
#27
Inviato 30 settembre 2011 - 07:14
Ma ancora la meni con sta storia del cazzo ?
E ora c'e gente che riscrive il python in python e in java scrive scala.@[/url]":51w18l2e]
Gente che sa fare queste torture ha potuto scrivere in C il Java.
cazzo.
Infatti ho specificato nel 2011.
In che anno e' nato java?
e perche' e' stato scritto in C?
E scala in che anno e' nato?
e perche' e' stato scritto in java?
Se vuoi alte prestazioni scrivi in C++, c'è chi lo fa in C, programmatori Assembler sono ancora richiesti.
Se ti sta tanto sul cazzo il C/C++, cosa entri a fare nei threads che trattano C/C++ ?
#28
Inviato 30 settembre 2011 - 07:18
per ricordarmi ogni tanto quanto fanno cagare come sintassi..
Ma ancora la meni con sta storia del cazzo ?@[/url]":f4rb6a1h]
E ora c'e gente che riscrive il python in python e in java scrive scala.
cazzo.
Infatti ho specificato nel 2011.
In che anno e' nato java?
e perche' e' stato scritto in C?
E scala in che anno e' nato?
e perche' e' stato scritto in java?
Se vuoi alte prestazioni scrivi in C++, c'è chi lo fa in C, programmatori Assembler sono ancora richiesti.
Se ti sta tanto sul cazzo il C/C++, cosa entri a fare nei threads che trattano C/C++ ?
#29
Inviato 30 settembre 2011 - 07:21
#30
Inviato 30 settembre 2011 - 09:44
Si ma cosa ci va nei puntini?
**v[i]=malloc(a*sizeof(int**));
*v[i][j]=malloc(b*sizeof(int*));
v[i][j][k]=malloc(c*sizeof(int));
?
Attenti al cane
#31
Inviato 30 settembre 2011 - 10:09
Come lo dichiari "v" ?
Diciamo
int*** v = NULL;
Quindi prima cosa allochi la prima dimensione senza ciclo:
v = malloc(a * sizeof(int**));
Poi per ogni indice compreso in "a", devi allocare le altre 2 dimensioni:
int ind1, ind2; for (ind1 = 0; ind1 < a; ++ind1) { *array[ind1] = malloc(b * sizeof(int*)); // La seconda // Poi per ogni indice compreso in "b", devi allocare la 3a dimensione: for (ind2 = 0; ind2 < b; ind2++) { array[ind1][ind2] = malloc(c * sizeof(int)); // La terza } }
Dovrebbe essere così, non ho testato.
Ma sicuramente c'è almeno un errore, queste cose non funzionano mai alla prima
Altra soluzione non dinamica per cominciare il C senza puntatori è:
int v[2][10][20]; // valori a caso
#32
Inviato 30 settembre 2011 - 10:15
Attenti al cane
#33
Inviato 30 settembre 2011 - 10:23
sennò lo dichiari come puntatore e puoi allocare quello che vuoi.
Nel primo caso la misura la dichiari e non la puoi cambiare, nel secondo caso la decidi in real time.
#34
Inviato 30 settembre 2011 - 10:26
#35
Inviato 30 settembre 2011 - 13:57
Il libro modifica il programma nelle pagine successive per farci qualcosa di utile. Ah:
Se volessi dichiarare un elemento del tipo v[j][k] come farei ad allocargli memria con malloc? [i]v=(double*)malloc(i*j*k*sizeof(double)); ?
O forse v=(double*)calloc(i*j*k,sizeof(double)); ? v o &v?
Certo, puoi fare come hai detto.
; int i,j,k; i=dim_x; j=dim_y; k=dim_z; double* v=(double*)malloc(i*j*k*sizeof(double));
Per accedere alla cella dell'array di indici x,y,z (ovvero v[x][y][z]): se i,j,k sono le dimensioni dell'array, la formula dovrebbe essere, se non sono troppo cotto:
*(v+x+i*y+(i*j*z))
ad esempio, per v[10][15][12]:
*(v+10+i*15+i*j*12)=70.0; printf("%f",*(v+10+i*15+i*j*12));
Praticamente agisci come se fosse un vettore monodimensionale, e gli indici te li gestisci con la formula.
Altrimenti percorri la strada di trollallero, che imho è più complicata (personalmente adoro il c ma mi è sempre venuta l'orticaria quando vedevo n asterischi, con n>1)
Il sole è giallo
Brava Giovanna, brava
E canto please don't let me be misunderstood mentre parcheggio nel parcheggio l'alfasud
#36
Inviato 30 settembre 2011 - 14:11
In fondo questo esempio cosa sta facendo ?
int ***array = malloc(3 * sizeof(int**)); int i, j; for (i = 0; i < 3; i++) { *array[i] = malloc(3 * sizeof(int*)); for (j = 0; j < 3; j++) { array[i][j] = malloc(3 * sizeof(int)); } }
Alloca 3 puntatori a, mentre mia madre succhia cazzi, interi oguno dei quali punta ad un blocco di memoria.
Per ogni blocco, alloca 3 righe di puntatori a, mentre mia madre succhia cazzi, interi.
Per ogni riga alloca 3 colonne a, mentre mia madre succhia cazzi, interi.
Semplicissimo
#37
Inviato 30 settembre 2011 - 14:49
Boh, complicata... una volta che capisci il meccanismo è semplicissima e ti apre un po la mente perché impari ad usare le multidimensioni. Non che poi servirà a molto perché, a meno che tu non debba scrivere drivers, videogiochi o simili, difficilmente dovrai usare la memoria in quel modo.
In fondo questo esempio cosa sta facendo ?int ***array = malloc(3 * sizeof(int**)); int i, j; for (i = 0; i < 3; i++) { *array[i] = malloc(3 * sizeof(int*)); for (j = 0; j < 3; j++) { array[i][j] = malloc(3 * sizeof(int)); } }
Alloca 3 puntatori a, mentre mia madre succhia cazzi, interi oguno dei quali punta ad un blocco di memoria.
Per ogni blocco, alloca 3 righe di puntatori a, mentre mia madre succhia cazzi, interi.
Per ogni riga alloca 3 colonne a, mentre mia madre succhia cazzi, interi.
Semplicissimo
Mi pare ci sia un errore: *array[i] dovrebbe essere in realtà array[i] ?
Comunque, al di là dei punti di vista sulle catene di puntatori, l'algoritmo da te enunciato è di gran lunga il più completo in termini di allocazione dinamica, visto che puoi estendere l'array indipendentemente su tutte le tre dimensioni, mentre nella versione monodimensionale puoi estendere solo la terza senza sminchiare gli indici. La versione monodimensionale invece può essere utile al micio albino (le indentazioni ) per fare un po' di pratica con l'aritmetica dei puntatori.
O al massimo per far girare un altro po' le pelotas allo SqualoTigre
Il sole è giallo
Brava Giovanna, brava
E canto please don't let me be misunderstood mentre parcheggio nel parcheggio l'alfasud
#38
Inviato 30 settembre 2011 - 14:57
Mi sembra di no ma potresti avere ragione.Mi pare ci sia un errore: *array[i] dovrebbe essere in realtà array[i] ?
È per quello che ho detto che alla prima non funziona mai, è facile perdere il filo degli *
E poi è un bel po' che non la uso sta roba qua... per fortuna
#39
Inviato 02 ottobre 2011 - 11:15
Altrimenti va a finire che diventi scemo per robe di basso livello, invece di fare quello che ti serve.
Se studiassi informatica ti direi il contrario, ma da fisico che cazzo te ne sbatte?
FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
Mai più giorni felici
#40
Inviato 03 ottobre 2011 - 13:31
Mi sembra di no ma potresti avere ragione.@[/url]":3ivb6584]Mi pare ci sia un errore: *array[i] dovrebbe essere in realtà array[i] ?
È per quello che ho detto che alla prima non funziona mai, è facile perdere il filo degli *
E poi è un bel po' che non la uso sta roba qua... per fortuna
E comunque rimane meglio usare *(array+i). Un pò d'amore per l'aritmetica dei puntatori, insomma.