Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C] Strutture

    Ciao a tutti,

    ho finito da poco la teoria sulle struct, ma ho gia qualche dubbio....

    struct part
    {
    int partnumber;
    char partname[20];
    };

    typedef part Part;

    Part b[10],*ptr;


    ptr=b;


    printf("Inserire un numero");
    scanf("%d",(ptr+3)->partnumber);
    printf("Inserire un nome");
    scanf("%s",(ptr+3)->partname);

    printf("Hai immesso: %d %s\n",(ptr+3)->partnumber,(ptr+3)->partname);

    system("pause");

    }


    allora questo codice non funziona perche manca un & davanti a (ptr+3)->partnumber....pero scusate ma (ptr+3)->partnumber non dovrebbe gia "mandare" il mio dato verso partnumber? Invece deduco che se ce bisogno di mettere & e perche bisogna fornire l indirizzo di partnumber? ma allora ptr contiene solo l indirizzo della struttura...i suoi membri interni poi si trattano quindi come variabili normalissime? Very confused

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Certamente che ci vuole il & ...

    Pero' non capisco il tuo dubbio ... non capisco cosa vuoi dire con "mandare il mio dato verso partnumber ..." ...

    (ptr+3)

    è un puntatore tramite il quale si accede al quarto elemento dell'array.

    Con

    ->partname

    si accede al membro partname del quarto elemento dell'array.

    Senza i puntatori, equivale a

    b[3].partnumber

    E quindi, dato che tu useresti

    &b[3].partnumber

    devi usare il & anche per la notazione corrispondente con i puntatori.

  3. #3

    eh

    ehm guarda pensavo che con (ptr+3)->partnumber si mettesse il dato direttamente in partnumber, invece si va a pescare solo il membro, di cui poi bisogna passare l indirizzo a scanf tramite & se non ho capito male. In pratica scrivere (ptr+3)->partnumber mi fa puntare a partnumber

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ti fa puntare al quarto elemento dell'array b e poi al suo membro partnumber ...

  5. #5
    Utente di HTML.it L'avatar di Lak3d
    Registrato dal
    Aug 2006
    Messaggi
    1,035
    penso che sia la scanf a richiedere l'indirizzo di memoria per come è costruita... altrimenti il "->" risolve già di suo il riferimento accedendo al membro... evidentemente è prorio la scanf a richiedere l'indirizzo di memoria del membro x dell'n-esimo elemento dell'array...

    Però non mi è chiaro come si faccia a far puntare ptr ad un vettore a due dimensioni invece che ad uno unidimensiaonale... il mio compilatore accetta un solo indice... e pure la printf non gradisce questa formula (ptr[1][3].membro)

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.