Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    156

    [C] passaggio di un vettore di tipo struct ad una funzione

    salve a tutti, vorrei capire questa cosa

    come posso passare per riferimento a una funzione un vettore di tipo struct?

    da quello che ho capito le strutture vengono tutte passate per valore. se io allora dichiaro un vettore di tipo struct in questo modo

    codice:
    struct Miastruttura vett[size];
    e volessi passare questo vettore per riferimento ad una determinata funzione, posso farlo solamente crando un altra struct e passare l'indirizzo della nuova struttura da me creata?

    per esempio creo un nuovo tipo di struct


    codice:
    struct Nuovastruttura{
          struct Miastruttura vett[size];
    } nuovodato;
    
    funzione(&nuovodato);
    
    void funzione (struct Nuovastruttura *newdataPtr){
          istruzioni;
          return;
    }

    in questo modo il vettore di strutture verrebbe passato per riferimento anzichè per valore... è corretto quello che dico?

    esiste un altro modo per passare un vettore di struct per riferimento?

    spero di non aver scritto troppe c***ate ...

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    In "C" una struttura può essere passata per valore oppure puoi passare l'indirizzo della struttura.
    Un array invece viene sempre passato per indirizzo (indipendentemente dal tipo).

    Quindi:

    void funzione (struct Miastruttura *p) { ... }

    oppure

    void funzione (struct Miastruttura p[]) { ... }

    (non cambia nulla)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    156
    ciao andbin, grazie per la risposta...

    ho però ancora dei dubbi da risolvere.

    poniamo quindi che io dichiari una variabile e un vettore di tipo struct Miastruttura

    codice:
    struct Miastruttura{
          int var1;
          int var2;
          char vett[size];
    } pippo, vettStruct[size];
    se io passassi la variabile pippo all'interno della funzione accadrebbe che tutte le modifiche apportate ai membri della struttura non andrebbero ad alterare i valori originali dei membri della variabile pippo (visto che si tratta di un passaggio per valore)

    nel caso invece io volessi passare alla funzione f1(struct Miastruttura v[]) il vettore vettStruct[size] accadrebbe che tutte le modifiche apportate ai membri della struttura andrebbero a modificare i valori originali... è esatto?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ilmo lesto
    codice:
    struct Miastruttura{
          int var1;
          int var2;
          char vett[size];
    } pippo, vettStruct[size];
    pippo è una variabile di tipo struct Miastruttura mentre vettStruct è un array di elementi di tipo struct Miastruttura.

    Se vuoi passare pippo ad una funzione puoi fare:

    codice:
    void funzione (struct Miastruttura s) { ... }
    
    funzione (pippo);
    (pippo è passato per valore, quello che vai con s non tocca pippo)
    oppure
    codice:
    void funzione (struct Miastruttura *ps) { .... }
    
    funzione (&pippo);
    (viene passato l'indirizzo di pippo, tramite ps puoi alterare il contenuto della struttura pippo)


    Nel caso di vettStruct puoi fare:
    codice:
    void funzione (struct Miastruttura *ps) { .... }
    
    funzione (vettStruct);
    (in questo caso viene passato l'indirizzo del primo elemento, con ps puoi alterare il contenuto delle strutture nell'array)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    156
    per quanto riguardava la variabile pippo mi era già tutto chiaro, ma ora mi hai risolto il quesito sul vettore di tipo struct. mi sono fatto ingannare dal manuale il quale mi diceva che in una funzione le strutture sono passate per valore... quindi supponevo che anche un vettore di tipo struttura fosse passato per valore... e invece non è così...
    un vettore rimane pur sempre un vettore, ossia un puntatore... quindi è ovvio che il passaggio avviene per riferimento

    grazie mille!

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    62
    Avete proprio fatto dei bellissimi esempi su come passare un vettore per riferimento.
    Ma l'utilizzo?

    Io ho scritto questo ma mi da errore quando utilizzo il vettore (righe 4 e 5):
    #include<stdio.h>
    void funzione (struct Miastruttura vettStruct[])
    {
    *vettStruct[0].var1=2;
    printf("prova %d", *vettStruct[0].var1);
    getche();
    }
    void main()
    {
    struct Miastruttura
    {
    int var1;
    int var2;
    char vett[5];
    }vettStruct[10];
    funzione(vettStruct);
    }

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.