|
|
|
|
Strumenti |
05-08-2020, 15:17 | #1 |
Junior Member
Iscritto dal: Aug 2020
Messaggi: 1
|
[Linguaggio C] Alcuni problemi con i puntatori
Buongiorno a tutti,
mi chiamo Davide e ho 36 anni. La mia carriera professionale è lunga e variegata, motivo per cui è un po' difficile da raccontare in poche righe. Le ultime mie esperienze sono state di docenza alle scuole superiori e adulti, da settembre inizierò con una società di intelligenza artificiale. Adoro guidare e il cappuccino XD. Dopo questa rapida presentazione, vi scrivo per chiedervi aiuto su una questione: nonostante i miei ricordi di C arrivino dalle superiori e da un lavoro svolto nel 2005, mi pare di ricordare abbastanza bene alcune regole. 1) dichiarazione variabile. Es: int a; 2) dichiarazione di puntatore a variabile. Es: int *b; 3) passare da variabile a indirizzo della variabile: &a; 4) passare da indirizzo a contenuto della variabile: *b; 5) passaggio funzione per riferimento. Es: int funzione(int *a, int *b) -> se modifico a e b all'interno della funzione, cambiano anche nel chiamante Detto questo, ho del codice così scritto, che serve a inserire un nuovo elemento in una lista linkata (struct formata da char* + puntatore a nuovo elemento). Salto i dettagli dell'algoritmo. Codice:
int put_nuovo_valore(Valore *lista,char *nuovo_valore) { if (lista==NULL) { lista=(Valore *)malloc(sizeof(Valore)); //Se la malloc dà errore if(lista==NULL) return -1; // inserisco i dati nel primo elemento della lista return 0; } // inserisci nuovo elemento (modifica della variabile lista) return 0; } Questo dovrebbe essere un passaggio per riferimento, quindi se modifico il puntatore "lista", dovrei vedermi modificata la struttura dati nel chiamante. Questo non avviene, e non capisco come mai. Qualcuno può darmi una mano? grazie Davide Ultima modifica di cioppone : 05-08-2020 alle 15:44. |
06-08-2020, 16:07 | #2 | |
Member
Iscritto dal: Feb 2011
Messaggi: 46
|
Quote:
Nel caso di Valore *lista, fare lista=malloc() modifica la copia locale del puntatore, non ciò a cui esso punta. Per raggiungere il tuo scopo si usa passare alla funzione Valore **lista (passando quindi l'indirizzo del puntatore) facendo poi *lista=malloc() |
|
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:41.