|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
|
[C]Funz con in output una struttura, assegnazione nel main?
Salve a tutti!
Avete risolto {1,10,100,1*10^n | n>tantotanto } miei problemi Allora veniamo a noi, ho bisogno di una semplice funzione in C che inizializzi una mia struttura: Codice:
typedef struct
{
int nItem; //numero di elementi
int *identifiers; //vettore di int contenente gli identificatori
String *strings; //vettore di stringhe
} StringPool[20];
Codice:
StringPool* costruttore(int n) Codice:
StringPool sp; [...] sp = costruttore(20) Codice:
main.c|19|error: incompatible types in assignment| grazie mille Andrea
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Eh be, stai assegnando un puntatore
Codice:
StringPool* costruttore(int n) Codice:
StringPool sp; [...] sp = costruttore(20) |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
|
praticamente:
voglio dichiare sp nel main, e tramite "costruttore" (che lavorerà su una sua struttura tmpSp sempre di tipo StringPool per poi darla in return) assegnare a sp (che è vuota) tmpSp (che è inizializzata).. ah e... purtroppo non posso semplicemente aggiungere un parametro alla funzione ma devo necessariamente agire così o al max con variabile globale che vorrei non fare
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum Ultima modifica di cdere : 01-05-2009 alle 17:27. |
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Quote:
Puoi fare in questo modo: Codice:
int main () {
ECCETERA
StringPool sp;
costruttore(&sp); //chiami costruttore passando l'indirizzo di sp, che sarà modificata direttamente
ECCETERA
return 0;
}
Codice:
void costruttore (StringPool *sp) {
(*sp).nItem = DEFAULT; //qui un numero di default
(*sp).identifiers = (int *) malloc( eccetera eccetera ); //con la malloc allochi lo spazio per il vettore di int
(*sp).strings = (String *) malloc( sizeof(String) ); //assumendo che String sia una struct definita
}
Codice:
void costruttore (StringPool *sp) {
sp->nItem = DEFAULT; //qui un numero di default
sp->identifiers = (int *) malloc( eccetera eccetera ); //con la malloc allochi lo spazio per il vettore di int
sp->strings = (String *) malloc( sizeof(String) ); //assumendo che String sia una struct definita
}
Solo un'altra cosa, occhio che se dichiari una struct così all'interno di un metodo Codice:
StringPool sp; Chiedi se qualcosa non ti è chiara. Ti consiglio, se ne senti il bisogno, di scrivere uno o due programmi didattici utili per capire bene come utilizzare i puntatori, che in C sono strautilizzati (a dir la verità anche negli altri linguaggi, di alto livello, ma qui in modo esplicito).
__________________
|
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
|
malocchio: no proprio per quella cosa che dicevo nel mio post precedente: "ah e... purtroppo non posso semplicemente aggiungere un parametro alla funzione ma devo necessariamente agire così o al max con variabile globale che vorrei non fare" se fosse stato così semplice l'avrei gia fatto, conosco abbastanza i puntatori
stesso discorso vale per malloc, so usarlo ma qui non devo
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum |
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Feb 2007
Città: Verona
Messaggi: 1060
|
Quote:
ma di preciso allora cosa vuoi fare ? e soprattutto cosa puoi fare? ![]() edit: me lo dicevi due giorni fa lo chiedevo direttamente a dei normalisti in informatica...
__________________
|
|
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Fammi capire, il prototipo di quel costruttore deve essere come l'hai scritto e non puoi usare malloc()?
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Feb 2001
Città: Foggia
Messaggi: 2519
|
mettiamola così, prototipo identico ma posso usare malloc: specifica bastarda
__________________
mi sembra di essere tornato adolescente ai bei tempi.. che figata essere di nuovo su questo forum |
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Dec 2003
Messaggi: 4907
|
Ma StringPool ha sempre 20 elementi?
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Jun 2002
Città: Dublin
Messaggi: 5989
|
Quote:
Comunque, per il singolo elemento puoi banalmente fare un costruttore che allochi sull'heap con malloc() e riempia i campi a seconda delle necessità, poi restituisca al chiamante il puntatore relativo all'elemento costruito. Per l'array dovresti avere un'array di puntatori e fare un ciclo chiamando il costruttore per ognuno degli elementi (con un'array di strutture invece dovresti passare il puntatore alla funzione, non il contrario).
__________________
C'ho certi cazzi Mafa' che manco tu che sei pratica li hai visti mai! |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:18.












ma di preciso allora cosa vuoi fare ? e soprattutto cosa puoi fare? 







