Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    [c] dare l'indirizzo di un array

    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;

  2. #2
    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.

  3. #3
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    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...


  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    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++) ;
    }

  5. #5
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    A me funziona perfettamente

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    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...

  7. #7
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    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.

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    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!

  9. #9
    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++) ;
    }
    è 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.

    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...

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    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..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.