Dari
07-09-2009, 21:15
Oggi dopo un anno circa che non usavo il c ho provato a mettermi a "tradurre" dei programmi molto semplici dal c++ al c, tanto per rinfrescarmi la memoria sulle varie differenze (tipo riferimenti, funzioni diverse per la memoria dinamica ecc.). Sul classico programma che fa push pop ecc. sugli stack il compilatore mi da un errore che non sono riuscito a capire sulla dereferenziazione di un doppio puntatore, ecco il codice:
void push(nodo **n, char x){
nodo * y = malloc(sizeof(nodo));
if(!y)return;
y -> next = *n;
*n = y;
y -> info = x;
/*
perche' non funziona
usando
*n -> info = x; ?
Il compilatore da l'errore:
"error: request for member ‘info’ in something not a structure or union"
*/
return;
}
In pratica se al posto di y -> info = x metto *n -> info = x non me lo compila, non riesco a capire che differenza ci sia fra y e *n.
La struttura nodo è questa:
struct nodo{
char info;
struct nodo * next;
};
void push(nodo **n, char x){
nodo * y = malloc(sizeof(nodo));
if(!y)return;
y -> next = *n;
*n = y;
y -> info = x;
/*
perche' non funziona
usando
*n -> info = x; ?
Il compilatore da l'errore:
"error: request for member ‘info’ in something not a structure or union"
*/
return;
}
In pratica se al posto di y -> info = x metto *n -> info = x non me lo compila, non riesco a capire che differenza ci sia fra y e *n.
La struttura nodo è questa:
struct nodo{
char info;
struct nodo * next;
};