cioppone
05-08-2020, 15:17
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.
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;
}
In buona sostanza questa funzione modifica la lista, creandola o aggiungendo un nuovo elemento.
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
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.
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;
}
In buona sostanza questa funzione modifica la lista, creandola o aggiungendo un nuovo elemento.
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