Funzione che ritorna un'array di struct

di il
13 risposte

Funzione che ritorna un'array di struct

Ciao a tutti,
sto cercando di capire come implementare una funzione che ritorna un' array struct, la funzione riceve come parametri un array di struct e la dimensione dell array, e mi deve ritornare un array di struct, qualcuno mi potrebbe fare un esempio?

13 Risposte

  • Re: Funzione che ritorna un'array di struct

    Ciao,
    intuitivamente direi
    
    struct tua_struct * funzione(...) {
        struct tua_struct * array = malloc(...);
        array[0] = ...;
        ...
        return array;
    }
    
    Prova e facci sapere, magari postando anche un po' di codice.
  • Re: Funzione che ritorna un'array di struct

    Confermo quanto dicevo ed aggiungo un piccolo esempio:
    
    #include <stdio.h>
    #include <stdlib.h>
    
    struct mia_struct {
    	int primo;
    	int secondo;
    };
    typedef struct mia_struct mio_tipo;
    
    mio_tipo * funzione(int n) {
    	mio_tipo* array = malloc(n * sizeof(mio_tipo));
    	int i;
    	for(i=0; i<n; ++i) {
    		array[i].primo = i;
    		array[i].secondo = i+1;
    	}
    	return array;
    }
    
    int main(int argc, char const *argv[])
    {
    	mio_tipo* array = funzione(5);
    	int i;
    	for(i=0; i<5; ++i) {
    		printf("%d  -  %d\n", array[i].primo, array[i].secondo);
    	}	
    	return 0;
    }
    
  • Re: Funzione che ritorna un'array di struct

    Frecciaverde ha scritto:


    ciao a tutti,
    sto cercando di capire
    Meno male che ti avevo detto di contattare un moderatore per spostare la discussione dalla sezione C# ...

    E' arrivato prima il nostro efficientissimo minomic ...
  • Re: Funzione che ritorna un'array di struct

    [OFFTOPIC]

    oregon ha scritto:


    efficientissimo minomic
    Detto da te è un grande complimento!
    [/OFFTOPIC]
  • Re: Funzione che ritorna un'array di struct

    Grazie per la risposta io ho fatto una cosa del genere, ma mi sa che è tt sbagliato


    struct studente
    {
    char cognome [25];
    char nome[25];
    char corso_di_laurea[6][25];
    int lode;
    int anni_iscrizione;
    };




    int main()
    {
    int valore = 1;
    int scelta;
    struct studente *student=NULL;
    int n;
    struct studente *vettore_restituito_da_funzione=NULL;



    printf("inserisci il numero di studenti\n");
    scanf("%d",&n);
    student=(struct studente *)malloc(n * sizeof(struct studente);
    vettore_restituito_da_funzione = inserisci_dati (n,student);

    }


    struct studente *inserisci_dati (int N, struct studente vett[])
    {
    int i;
    struct studente *vettore_completato=NULL;
    vettore_completato = (struct studente*)malloc(N * sizeof(struct studente);

    for(i=0; i<N; i++)
    {
    printf("studente numero : \t %d",i+1);
    printf("inserisci cognome: \t ");
    scanf("%s", vett.cognome);
    printf("inserisci nome: \t ");
    scanf("%s", vett.nome);
    printf("inserisci corso di laurea: \t ");
    scanf("%s",vett.corso_di_laurea);
    printf("inserisci lode: \t ");
    scanf("%d",&vett.lode);
    printf("inserisci anni_iscrizione: \t ");
    scanf("%d",&vett.anni_iscrizione);
    }
    return vettore_completato;
    }
  • Re: Funzione che ritorna un'array di struct

    A parte la mancanza dei tag CODE... tu vorresti che la funzione inserisci_dati si occupasse di leggere l'input dell'utente, inserire tutto in un array e restituirlo, giusto? Allora perché passi l'array vett? Basta passare la dimensione! L'array lo crei all'interno della funzione e poi lo restituisci.

    Un altro approccio è quello di creare l'array da qualche altra parte (ad esempio nel main) e poi passarlo alla funzione insieme alla sua dimensione affinché lei lo riempia.

    Vanno bene entrambi i modi, ma non mischiarli perché fai solo confusione.
  • Re: Funzione che ritorna un'array di struct

    Avevo un po di confusione ora ho capito grazie
  • Re: Funzione che ritorna un'array di struct

    Quindi se in questo caso passo vett, la funzione lo riempe e poi faccio return vett?
  • Re: Funzione che ritorna un'array di struct

    Frecciaverde ha scritto:


    quindi se in questo caso passo vett, la funzione lo riempe e poi faccio return vett?
    No, se passi vett allora lo stai passando per riferimento: la funzione lo riempie e non è necessario ritornare nulla (cioè la funzione può essere tranquillamente di tipo void).
  • Re: Funzione che ritorna un'array di struct

    E se io dopo che completo l'array di struct volessi fare una funzione che mi calcola ad esempio la media dei voti ? come posso fare ?
  • Re: Funzione che ritorna un'array di struct

    Prendi il tuo array, che è stato riempito da una funzione come abbiamo visto fino ad ora, e lo passi ad un'altra funzione che si occuperà di andare a leggere i valori e calcolare la media.
  • Re: Funzione che ritorna un'array di struct

    Anche se sono all'interno di uno switch case? cioe la funzione che lo riempe è nel case 1 mentre la funzione che calcola la media è nel case 2, nel case 2 non devo riempire di nuovo l'array giusto?
  • Re: Funzione che ritorna un'array di struct

    Allora, l'array deve essere riempito prima di poter calcolare la media, e questo mi sembra ovvio. Quindi la funzione che lo riempie (occhio che si dice "riempie" e non "riempe") deve essere stata già chiamata quando chiami quella per la media. Se hai fatto una specie di menu allora una possibile esecuzione sarebbe:
    - scelgo 1 --> funzione di riempimento che legge input e salva tutto nell'array di struct
    - scelgo 2 --> chiamo la funzione per la media e le passo l'array (che a questo punto è già riempito)
Devi accedere o registrarti per scrivere nel forum
13 risposte