Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C] Chiarimenti sulle strutture

    Leggendo su un libro, ho capito che le strutture seguono la sintassi :

    struct nome_stuttura {
    variabili
    }
    Il problema é che successivamente in un esempio scrive :

    struct persona {
    char nome[Dimensionenome];
    char indirizzo[Dimensioneindirizzo];
    struct data nascita;
    struct data assunzione;
    }

    Ecco, quelle due struct perché sono messe lì? come si utilizzano ?
    Sono strutture che si devono dichiarare prima di questa allo stesso modo? E perché hanno scritto data e poi staccato nascita o assunzione?? Scusate ma non lo capisco
    Grazie a chiunque mi chiarisca la cosa
    p.s.
    dopo la parentesi graffa che chiude la struct, ci vuole o no il punto e virgola??Che la metto o non la metto funziona lo stesso..

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    che io sappia il ; ci va:

    codice:
    struct persona { 
    char nome[Dimensionenome]; 
    char indirizzo[Dimensioneindirizzo]; 
    struct data nascita; 
    struct data assunzione; 
    };
    Soprattutto quando dichiari subito persone:

    codice:
    ...
    struct data assunzione; 
    } PincoPallino; 
    ...
    Cmq una struttura la si può paragonare circa ad una classe OOP, solo che i membri sono pubblici.

    Lo scopo è incapsulare dati in un unico dato, ad esempio il dato persona ha più dati collegati a lui, come nome, data nascita ecc...
    data è un'altra struttura, che contiene a sua volta anno mese e giorno

    codice:
    ...
    struct persona p;
    strcpy(p.nome, "Pinco");
    strcpy(p.indirizzo, "Via blabla");
    p.nascita.anno = 2005
    p.nascita.mese = 5;
    p.nascita.giorno = 1;
    ...
    Per evitare di scrivere struct davanti a persona si può utilizzare typedef.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3
    Oh mamma mia, dovevo scrivere che sono abbastanza agli inizi, ho capito 1/4 di quello che mi hai detto

    Originariamente inviato da netarrow

    Soprattutto quando dichiari subito persone:

    codice:
    ...
    struct data assunzione; 
    } PincoPallino; 
    ...
    Cosa fai in questa parte di programma ?? Cioé PincoPallino é scritto al di fuori di struct..che fa??

    Cmq una struttura la si può paragonare circa ad una classe OOP, solo che i membri sono pubblici.
    Cos'é una classe OOP??

    E poi ancora non ho capito quelle due struct dentro alla struct principale cosa fanno....
    Scusami tanto ma sono miliardi di anni indietrooooooooooooo
    Grazie mille per l'aiuto

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Quando scrivo immediatamente

    codice:
    struct a {
    int b;
    } Ciao;//Ciao viene dichiarato come variabile globale
    Globale vuol dire acessibile da tutto il file(anche da eventuali altri file volendo.. ma è un altro discorso)

    Sarà subito disponibile una variabile di tipo a chiamata Ciao, quindi non sarà necessario dichiararla:

    codice:
    struct a Ciao;//non serve, Ciao è già dichiarato su come globale
    Scusa se ho tiranto in ballo la programmazione orientata aggli oggetti, pensavo che la conoscevi. Se non la sai lascia perdere sennò fai confusione con la programmazione modulare(quella del C che stai studiando, orientata ai dati e alle funzioni).

    Se non hai ancora capito a cosa serve una struttura, ti faccio un esempio completo:

    codice:
    #include <string.h>
    #include <stdio.h>
    #include <malloc.h>
    
    struct Giocatore {
    char* nome;
    int eta;
    int numero;
    int isAmmonito;
    int isInjured;
    //ecc...
    };
    
    struct Squadra {
    struct Giocatore* estremo;
    //ecc...
    } Milan;
    
    int main(void) {
    struct Giocatore* g = malloc(sizeof(struct Giocatore));//credo sia così ora non ricordo
    strcpy(g->nome, "Dida");
    g->eta = 25;//sparato a caso
    g->numero = 1;
    g->isAmmonito = 0;
    g->isInjured = 1;
    Milan.estremo = g;
    printf("%s\n", Milan.estremo->nome);
    printf("%d\n", Milan.estremo->eta);
    printf("%d\n", Milan.estremo->numero);
    if(Milan.estremo->isAmmonito) printf("%s\n", "E' ammonito");
    if(Milan.estremo->isInjured) printf("%s\n", "E' infortunato");//(magari)
    
    return 0;
    }
    Il programma l'ho provato e funziona(anche se non capisco va solo se compilato a debug), se hai dubbi sulle strutture chiedi pure.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  5. #5
    AIUTOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO OO
    ti scrivo tutte le cose che non ho capito, tieni conto che i puntatori ho appena iniziato a studiarli...

    Originariamente inviato da netarrow
    codice:
    struct Squadra {
    struct Giocatore* estremo;
    //ecc...
    } Milan;
    cosa ci fa una struct dentro ad una struct ??

    codice:
    struct Giocatore* g = malloc(sizeof(struct Giocatore)
    MM qui crei uno spazio in memoria della grandezza di Giocatore vero?g dove spunta?
    codice:
    strcpy(g->nome, "Dida");
    ?
    strcpy l'ho capito..non capisco invece la freccia, se capisco quello capisco anche la parte dopo VVoVe:

    Mamma mia mi accorgo di essere sempre più indietroooo!!!Fra poco mi odierai
    Grazie ancora

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    una struct dentro una struct vuol dire che dichiaro una variabile di quel tipo.

    se dichiari

    codice:
    struct a {
    int b;
    };
    per creare un dato di tipo a, devi specificare che è una struttura, in C, quindi struct a dichiari.

    codice:
    struct a var;//vuol dire dato di tipo struct a, chiamato var
    Per evitare di scrivere ogni volta struct si può fare questo:

    codice:
    ...
    typedef struct squadra
    {
    //ecc...
    } Arsenal;
     ...
    La freccia è appunto l'operatore freccia , è una sorta di varainte dell'operatore punto specifico per chiamare membri di un puntatore a struttura.

    pe intenderci, -> sia dereferenzia che accede al membro, corrisponde a:

    codice:
    ...
    *(struttura).membro;
    ...
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  7. #7
    Ho capito tutto tranne la freccia..potresti rispiegarmela con qualche esempio facile per favore? Grazie ancora, poi non ti chiedo più niente

  8. #8
    ti consiglio quest'ottima lettura:
    http://www.hyperbook.it/

    1)fai click sul corso "Linguaggio C"
    2)menù di sinistra: capitolo 12 (Tipi derivati e classi di memoria)
    (p.s. parla anche degli operatori . (punto) e -> (freccia)

    ...Terrible warlords, good warlords, and an english song

  9. #9
    Originariamente inviato da Johnny_Depp
    ti consiglio quest'ottima lettura:
    http://www.hyperbook.it/

    1)fai click sul corso "Linguaggio C"
    2)menù di sinistra: capitolo 12 (Tipi derivati e classi di memoria)
    (p.s. parla anche degli operatori . (punto) e -> (freccia)

    Perfetto grazie mille !! Ora me lo divoro


  10. #10
    ho provato a fare un programmino per vedere se ho capito le strutture :

    codice:
    #include<stdio.h>
    
    struct macchina{
    char *modello;
    char *colore;
    };
    
    main(){
    struct macchina *a1;
    
    a1->colore="blu";
    a1->modello="Peugeot 406";
    
    printf("%s %s",(*a1).colore,(*a1).modello);
    }
    Il fatto é che così non funziona.. facendo due modifiche invece funziona, ma non capisco perché !Ho provato guardando un esempio, che infilava una variabile così....
    codice:
    #include<stdio.h>
    
    struct macchina{
    char *modello;
    char *colore;
    };
    
    main(){
    struct macchina *a1,oggi;
    
    a1=&oggi;
    a1->colore="blu";
    a1->modello="Peugeot 406";
    
    printf("%s %s",(*a1).colore,(*a1).modello);
    }
    Spiegatemi pls


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 © 2024 vBulletin Solutions, Inc. All rights reserved.