Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337

    [C] struct e funzione

    se ho un vettore di struct posso tranquillamente passale per indirizzo.

    mentre se ho una struct semplice, ad esempio:

    struct persona { char nome[30];
    char cognome[30];
    int anni;
    } mario;


    per passare un solo elemento ad una funzione , faccio il passaggio per valore.

    mentre se voglio passarla tutta posso definire un prototipo del genere?

    struct persona funzione (struct persona nome_persona);

    e poi per la chiamata ad esempio:

    funzione( massimo);

    e nel return della struct metto:

    return (massiomo_rinnovato); //ovvero ritorno tutta la struct come se fosse una variabile

    posso fare tutto questo?

    oppure devo passare la struct per puntatore?

    facendo

    void funzione (struct persona *ptr); //protoripo

    la chiamata:

    funzione (&massimo);

    senza ritornare nulla?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Le variabili strutturate in genere sono passate per puntatore.

    Non ho capito appieno il tuo dubbio ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    è quello che credevo anch'io però facendo gli esercizi del libro ad un certo punto in una risposta mi scrive:

    le strutture sono SEMPRE passate per valore nelle chiamate di funzione


    e qui mi sono cadute tutte le certezza

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non SEMPRE ... ad esempio

    codice:
    struct persona
    { 
       char nome[30];
       char cognome[30];
       int anni;
    }; 
    
    void funzione(struct persona nome_persona)
    {
       printf("%s\n", nome_persona.nome);
       printf("%s\n", nome_persona.cognome);
       printf("%d\n", nome_persona.anni);
    
       strcpy(nome_persona.nome, "Paolo");
       strcpy(nome_persona.cognome, "Rossi");
       nome_persona.anni = 10;
    }
    
    int main()
    {
       struct persona massimo;
    
       strcpy(massimo.nome, "Antonio");
       strcpy(massimo.cognome, "Neri");
       massimo.anni = 10;
    
       funzione(massimo);
       printf("%s\n", massimo.nome);
       printf("%s\n", massimo.cognome);
       printf("%d\n", massimo.anni);
    
       return 0;
    }
    ma bisognerebbe leggere tutto il contesto del discorso in cui c'e' quella frase ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    nel tuo esempio avrei dovuto passare per puntatore, perchè passando per valore non riesco a toccare la struct originale, ne creo solo una copia.

    il contesto era, dire se delle frasi sono vere o false, e se sono false dire il perchè:

    "le strutture sono sempre passate per riferimento nelle chiamate di funzione"

    soluzione del libro:

    "Falso, le strutture sono sempre passate per valore nella chiamata di funzione"

    questo era il contesto, secondo me sono entrambe in parte false

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ah ... quindi non era una affermazione ma una domanda di un test ... e PERCHE' non lo dici?

    Se si parla di "array di strutture" (strutture al plurale intendendo array di strutture) allora le passi SOLO con il puntatore ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2005
    Messaggi
    337
    ecco il perchè, mi era sfuggito il plurale

    mi sento di un ingoranza rispetto ai frequentatori di questo forum

    grazie per la milionesima volta

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.