|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2003
Città: cagliari
Messaggi: 619
|
array e costanti in c
ciao a tutti ho un problema con l'utilizzo degli array.
Ho realizzato un programma di gestione di una rete in cui definisco degli array monodimensionali e bidimensionale, la cui dimensione dipende dal numero di nodi che compone la rete. Il mio problema è dovuto al fatto che gli array quando vengono definiti hanno bisogno di un valore costante che definisce la quantità di memoria che deve essere allocata. Io vorrei che il valore del numero di nodi e quindi della dimensione degli array fosse prelevato da un file di testo. è possibile ciò? |
![]() |
![]() |
![]() |
#2 |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Se definisci gli array dinamicamente, non c'è problema.
Anzitutto, anziché fare: Codice PHP:
Codice PHP:
Codice PHP:
Codice PHP:
Quando hai finito, liberi la memoria con: Codice PHP:
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
![]() |
![]() |
![]() |
#3 | |
Senior Member
Iscritto dal: Nov 2003
Città: cagliari
Messaggi: 619
|
Quote:
ok cosi funziona, grazie. ![]() Però ho problemi con questo tipo di variabili. struct nodo *G[len]; int a[len][len]; come devo impostare l'allocazione dinamica in questi due casi? |
|
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: May 2002
Città: somewhere in Europe
Messaggi: 2554
|
Devi usare i puntatori a puntatori.
Fai un **colonne con relativa malloc, poi devi inizializzare con malloc anche tutte le righe con un ciclo for Ecco qui un esempio, qui ho inizializzato al matrice tutta a 0 Ah, poi la usi come una matrice normalissima matrice[N][N] Codice:
int **matrice; //matrice dinamica e inizializzata matrice=(int **)malloc(N*sizeof (int *)); for(i=0;i<N;i++) { matrice[i]=(int *)malloc(N*sizeof(int)); for(j=0;j<N;j++) matrice[i][j]=0; } |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Nov 2003
Città: cagliari
Messaggi: 619
|
Quote:
vale per entrambe le variabili? -- struct nodo *G[len]; -- int a[len][len]; |
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Nov 2003
Città: cagliari
Messaggi: 619
|
allora:
per l'array bidimensionale non c'è nessun problema. ho problemi con la variabile struttura: struct nodo *G[len]; come faccio a creare l'allocazione dinamica? |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Nov 2003
Città: cagliari
Messaggi: 619
|
up
|
![]() |
![]() |
![]() |
#8 | |
Senior Member
Iscritto dal: May 2002
Città: somewhere in Europe
Messaggi: 2554
|
Quote:
Te l'hanno spiegato sopra G = (struct nodo*)malloc(sizeof(struct nodo)); Anche se non capisco bene a cosa serve una struttura che poi in realtà è un vettore,o è un array di putatori a struct? |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Nov 2003
Città: cagliari
Messaggi: 619
|
Quote:
Mi da errori usando quest'istruzione. questo è un array di puntatori a struct |
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Nov 2003
Città: cagliari
Messaggi: 619
|
questo è l'array originale in cui devo definire la costante
struct nodo *G[N]; queste sono le istruzioni usate per risolvere il problema di N variabile: struct nodo **G; G= (struct nodo **)malloc(N*sizeof(struct nodo)); for(i=0;i<N;i++) { G[i]=(struct nodo *)malloc(N*sizeof(struct nodo)); for(j=0;j<N;j++) G[i][j]=0; } e questo è l'errore che viene generato: error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'const int' (or there is no acceptable conv ersion) dove sbaglio? |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: May 2002
Città: somewhere in Europe
Messaggi: 2554
|
Ho provatoa compilarlo e DEVc++ mi dice giustamente che non è corretto chiamare due cosa con lo stesso nome (G)
|
![]() |
![]() |
![]() |
#12 | |
Senior Member
Iscritto dal: Nov 2003
Città: cagliari
Messaggi: 619
|
Quote:
|
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: May 2002
Città: somewhere in Europe
Messaggi: 2554
|
Chiamarlo con un nome diverso, se mi dici esattamente cosa vuoi fare posso provare ad implementarlo.
Ho capito che vuoi fare un vettore di puntatori a struct poi allochi la memoria per ogni elemento del vettore per un sacco di struct poi usi le struct come matrici cosa che non puoi fare, quello è un errore |
![]() |
![]() |
![]() |
#14 | |
Senior Member
Iscritto dal: Nov 2003
Città: cagliari
Messaggi: 619
|
Quote:
Nel mio programma viene analizzata una rete rappresentata da una matrice in cui ogni elemento rappresenta il link di collegamento tra due nodi. Ciascun link a sua volta viene identificato da un costo , dal ritardo generato e dai nodi collegati. le strutture le utilizzo per raccogliere tutte queste informazioni |
|
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Jul 2000
Città: Vignola (MO)
Messaggi: 316
|
Vi seguo
![]()
__________________
<Asus A8N-E Deluxe> <Amd64 3000+> <Ram 2.5 Gb> <Geffo3> <2 Maxtor 160 Gb RAID 1> <Adsl ZyXEL 645r> <ESS Maestro> <GNU/Linux Debian Etch> ![]() Wii 1037 4238 6261 1967 |
![]() |
![]() |
![]() |
#16 | |
Senior Member
Iscritto dal: May 2002
Città: somewhere in Europe
Messaggi: 2554
|
Quote:
Si ma non capisco esattamente che dati devi inserire nelle strutture. Sennò basterebbe fare una lista o al max una lista di liste... Usare una matrice come lista di puntatori a struct mi sembra un po' deleterio, soprattutto quando sulle liste una volta fatta una le hai fatte tutte, nel senso che fai un semplice copia e incolla da un vechio programma e sei a posto. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 09:22.