Realloc in funzione

di il
7 risposte

Realloc in funzione

Salve.
Vorrei sapere come accedere al contenuto di un array struttura all interno di una funzione di questo tipo
void x(y **nomestruttura, int n);

Ho provato :
for(int i=0;i<n; i++)
if((*nomestruttura->a) ==0);

Però accede solo al primo valore dell’ array, dopo di che mi da errore

7 Risposte

  • Re: Realloc in funzione

    Per come la leggo io, che non sono un esperto, con *nomestruttura accedi al puntatore di una struttura di tipo y, e applicando l'operatore [] a quel puntatore accedi direttamente alla struttura stessa. Per questo credo che dovrebbe essere:

    if((*nomestruttura.a)==0) // se e' zero, fai qualcosa

    Prova... chissà che funzioni.
  • Re: Realloc in funzione

    E che c'entra la realloc?

    Perché usi un puntatore doppio? Come chiami la funzione? Qual è la struttura?

    Come passi l'array delle strutture? Insomma mostra più codice e usa i tag CODE ...
  • Re: Realloc in funzione

    Scusate. Allora la funzione deve controllare il membro “quantità” di ogni struttura e se uguale a 0 eliminare la struttura dall array. Codice:
    
    void  elimino_alimento(alimenti ** lista, int *n)
    {
       for( int i=0; i<*n; i++)
       {
            if(*lista[i]->quantita == 0)
            {
                //sposta l’ array di una posizione indietro dalla struttura che si deve eliminare
                
                 sposta_array(*lista, *n , i); 
             
               // rialloco array soglie do l ultima struttura dall array. 
                realloc_array(lista_alimenti, - -(*n));
            }
       }
    


    Chiamata
    
    elimino_alimento(&lista , &n);
    

    Tutto funziona tranne il controllo della quantita.
  • Re: Realloc in funzione

    Ti avevo chiesto di mostrare la struttura, come hai allocato i dati e come hai chiamato la funzione nel main.
  • Re: Realloc in funzione

    
    typedef struct{
         char nome[20];
         int quantita;
    }alimenti;
    
    int main
    {
       int n = 20;
       alimenti *lista = NULL;
       lista = (alimenti) calloc(n, sizeof(alimenti);
       .....// inizializzazione array
       elimino_alimento(&lista, &n);
    }
    
    Credo ci sia tutto ciò che hai chiesto
  • Re: Realloc in funzione

    Dunque devi stare attento alle precedenze inserendo opportune parentesi. La if sarà

    if ( (*lista).quantita == 0 )
  • Re: Realloc in funzione

    Grande.
    Grazie davvero.
Devi accedere o registrarti per scrivere nel forum
7 risposte