|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Oct 2013
Messaggi: 158
|
[C] Puntatore a puntatore con lista
Ciao a tutti,
mi trovavo in difficolta con questo esempio, che non mi stampa il valore 1 (p->value = 1) dandomi errore. Codice:
#include <stdlib.h>
#include <stdio.h>
typedef struct list{
int value;
} list;
int main(){
list* p = (list*) malloc (sizeof(list));
p->value = 1;
list** q;
q = &p;
printf("%d \n", q->value);
system("PAUSE");
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Con l'istruzione q = &p; stai referenziando il puntatore p, pertanto quando vuoi accedervi da q lo devi dereferenziare con l'operatore *:
printf("%d \n", (*q)->value); |
|
|
|
|
|
#3 | |
|
Member
Iscritto dal: Oct 2013
Messaggi: 158
|
Quote:
16 request for member of non-aggregate type before ')' token 16`value' has not been declared |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Appena provato, a me funziona
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Oct 2013
Messaggi: 158
|
Avevo sbagliato a scriverla
però perche cosi funziona: printf("%d \n", (*q)->value); e perche cosi non funziona? cosa cambia printf("%d \n", *q->value); p.s. ti ringrazio daniels |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jan 2014
Messaggi: 852
|
Perchè l'operatore di accesso ai membri di struttura -> ha priorità rispetto all'operatore di dereference *, pertanto il compilatore capisce che tu vuoi accedere al membro value di q e poi vuoi dereferenziarlo, ma q è un puntatore, non una struttura, pertanto non ha membri e viene generato quell'errore. Quello che invece bisogna fare è dereferenziare il puntatore per ottenere la struttura e poi accedere al membro. Le parentesi dicono al compilatore cosa fare prima, nel dubbio mettile sempre.
|
|
|
|
|
|
#7 | |
|
Member
Iscritto dal: Oct 2013
Messaggi: 158
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:03.




















