Ciao! Come faccio a far puntare un puntatore ipotetico p al mio array di messaggi? Ho provato cosi, ma dice che il tipo è incompatibile.![]()
char *messaggi[] ={
"Ciao Luca!",
"Ciao Angela!",
"Ciao Nadia!",
"Ciao Daniela!"
};
char *p[] = messaggi;
Ciao! Come faccio a far puntare un puntatore ipotetico p al mio array di messaggi? Ho provato cosi, ma dice che il tipo è incompatibile.![]()
char *messaggi[] ={
"Ciao Luca!",
"Ciao Angela!",
"Ciao Nadia!",
"Ciao Daniela!"
};
char *p[] = messaggi;
char *messaggi[] ={
"Ciao Luca!",
"Ciao Angela!",
"Ciao Nadia!",
"Ciao Daniela!"
};
char **p = messaggi;
prova cosi
dA .. foto di viaggio
L'esperienza è il tipo di insegnante più difficile.
Prima ti fa l'esame, e poi ti spiega la lezione.
messaggi è un array di puntatori a char, ma un array è anche un puntatore, quindi messaggi è un puntatore a puntatore a char, quindi p deve essere dichairato come char **, la regola è sempre la stessa...
![]()
mi fregano sempre questi puntatori...
..però come si spiega che se passo da una funzione la mia dichiarazione precedente funziona?
codice:#include <stdio.h> int main() { char *messaggi[] ={ "Ciao Luca!", "Ciao Angela!", "Ciao Nadia!", "Ciao Daniela!", NULL }; stampa(messaggi); getch(); return 0; } stampa(char *p[]) { while(*p) printf("%s", *p++) ; }
non so :bubu: mi hai capito anx?
dicevo che è strano che se nel programma faccio:
char *p[] = messaggi;
mi viene segnalato un errore.
se passo "messaggi" a una funzione...e questa lo riceve in char *p[]
allora tutto ok...
La ragione sta nel solito fatto che ...gli array sono dei puntatori COSTANTI, puoi modificare/inizializzare gli elementi dell'array, ma non l'array stesso, cioè il puntatore rappresentato dall'array. Se tu scrivi:
char *p[] = messaggi;
stai dicendo che l'array p deve puntare all'indirizzo che è puntato da messaggi, e questo non puoi farlo. Se invece fai
char **p = messaggi;
non dà errori proprio perchè p è un puntatore, non un array, e come tale puo essere inizializzato/riassegnato.
char *p[]
cosi non stò dicendo..che p punta a un array di puntatori a (char *)?
char **p = messaggi;
cosi dico che p è un punatore a puntatore a (char *)
...e quest'ultima mi stà anche bene, perchè è inutile informare il puntatore che punti un array di puntatori quando posso dire più semplicemente che punta un puntatore. Ma quello che mi pare strano è l'esempio che ho proposto.
..Si vede che lo stesso meccanismo di attribuzione sia compilato se "char *p[]" si trovi come parametro di una funzione e venga passato "messaggi". Altrimenti se coesistono nella stessa parte di codice questa attribuzione segnala un errore. Allora a questo punto preferisco l'ultima notazione che è più versatile. Fino ad adesso, ho capito che il c, a vari lati non rigorosissimi, e questo potrebbe esserne uno ma posso anche sbagliarmi!
è una cosa diversa qui passi ad una funzione un array(o meglio una stringa xchè si tratta di char) in cui ogni elemento è a sua volta un'altra stringa e gli dici di stampare ogni elemento.Originariamente inviato da Lucked
mi fregano sempre questi puntatori...
..però come si spiega che se passo da una funzione la mia dichiarazione precedente funziona?
codice:#include <stdio.h> int main() { char *messaggi[] ={ "Ciao Luca!", "Ciao Angela!", "Ciao Nadia!", "Ciao Daniela!", NULL }; stampa(messaggi); getch(); return 0; } stampa(char *p[]) { while(*p) printf("%s", *p++) ; }
Mentre nell'esempip di sopra vuoi far puntare un nuovo array(p) alla locazione di memoria dove già c'è messaggi...ma come ti hanno speigato sopra di un array puoi modificare i singoli elementi ma non la memoria alla quale punta:ecco xchè ti serve **(puntatore di puntatore)
ciao
![]()
Vediamo..sogni che diventano professione...passioni che diventano vita...Free as in Freedom...
Non ne sono convinto!
parliamo dell'evidenza:
char *p[] = messaggi; Wrong!
passo "messaggi" a una funzione in cui dichiaro
char *p[] ed è esatto? E' questo il punto..