Passaggio dell'array di una struttura

di il
4 risposte

Passaggio dell'array di una struttura

Salve, avrei un piccolo problema: ho creato una struttura così definita all'interno di un sorgente c:

typedef struct elem_form
{
char nome[7];
int prop[3][16];

} elem_formula_t;

Ho poi creato nella funzione main, una variabile
elem_formula_t prima_formula;

Ora, io vorrei passare l'array bidimensionale prop, facente parte di prima_formula, a una funzione che riempa tale array: io so che gli array vengono sempre passati per indirizzo (sono dopotutto assimilabili a puntatori), ma quando faccio stampare i valori dell'array bidimensionale fuori dalla funzione dove è stato riempito, non compaiono gli stessi valori. Sbaglio qualcosa? Devo passare in un qualche modo l'array oppure passare tutta la formula tipo

nome_funzione(prima_formula)
oppure
nome_funzione(&prima_formula)
o altro?
Grazie per l'eventuale risposta e Buone feste.

4 Risposte

  • Re: Passaggio dell'array di una struttura

    Ci mostri il codice che non funziona di cui parlavi ?

    (quello della funzione e della chiamata alla funzione)
  • Re: Passaggio dell'array di una struttura

    Ecco qua:
    
    
    #include <stdio.h>
    #include <ctype.h>
    #include <string.h>
    
    
    /* struttura dati definita per memorizzare le proposizioni
    inserite dall'utente e i connettivi logici */
    typedef struct elem_form
    {
            char    nome[7];
            int     prop[3][16];
    
    }   elem_form_t;
    
    elem_form_t acquisisci_formula();
    int valida_formula();
    void valori_formula(elem_form_t);
    
    
    int main() {
    
        elem_form_t prima_formula,
                    seconda_formula;
    
        printf("***************************************************\n");
        printf("Programma che acquisisce due proposizioni logiche e \nstabilisce se esse sono equivalenti\n");
    
        printf ("-Utilizza le lettere minuscole dell'alfabeto come proposizioni\n\n");
        printf ("-Se desideri anteporre il connettivo logico di negazione\n utilizza le lettere MAIUSCOLE\n\n");
        printf("Inserisci:\n");
        printf ("\t1 per il connettivo logico di congiunzione\n\n");
        printf ("\t2 per il connettivo logico di disgiunzione\n\n");
        printf ("\t3 per il connettivo logico di implicazione\n\n");
        printf ("\t4 per il connettivo logico di doppia implicazione\n\n");
        printf ("Esempio di formula ben formata: a2B4c\n\n");
    
        printf("Inserire la prima proposizione logica: ");
        prima_formula = acquisisci_formula();
    
        printf("Inserire la seconda proposizione logica: ");
        seconda_formula = acquisisci_formula();
    
        valori_formula(prima_formula); /* <----------------- chiamata alla v
        printf("/%d/", prima_formula.prop[1][3]);
    
    
    return 0;
    
    }
    
    void valori_formula(elem_form_t formula){
    
        int i; /* variabile contatore */
        int modulo, cont_prop, risultato = 0, j, k;
    
    
        for (i = 0, modulo = 2, cont_prop = 0; i <= len_string; i = i + 2, modulo = 2 * modulo, cont_prop++){
            for (j = 0; j < 16; j++){
                risultato = j % modulo;
                if (i == 0){
                    if (risultato == 0){
                        k = 0;
                        formula.prop[cont_prop][j] = 0;
                    }
                    else if (risultato == 1){
                        k = 1;
                        formula.prop[cont_prop][j] = 1;
                    }
                }
                else if (i == 2){
                    if (risultato < 2){
                        k = 0;
                        formula.prop[cont_prop][j] = 0;
                    }
                    else if (risultato >= 2){
                        k = 1;
                        formula.prop[cont_prop][j] = 1;
                    }
                }
                else if (i == 4){
                    if (risultato < 4){
                        k = 0;
                        formula.prop[cont_prop][j] = 0;
                    }
                    else if (risultato > 2){
                        k = 1;
                        formula.prop[cont_prop][j] = 1;
                    }
                }
                else if (i == 6){
                    if (risultato < 8){
                        k = 0;
                        formula.prop[cont_prop][j] = 0;
                    }
                    else if (risultato > 4){
                        k = 1;
                        formula.prop[cont_prop][j] = 1;
                    }
                }
            }
        }
    
        printf("-%d-", formula.prop[1][3]);
    
    }
    
    
    Non è tutto il codice del sorgente del programma, ho inserito l'essenziale per chiarezza, comunque la funzione chiamata è "valori_formula", mentre la funzione chiamante è la funzione "main". (noto che i
  • Re: Passaggio dell'array di una struttura

    La funzione sarà

    void valori_formula(elem_form_t *formula)

    La chiamerai con

    valori_formula(&prima_formula);

    e al suo interno potrai scrivere

    formula->prop[1][3]=1234;
  • Re: Passaggio dell'array di una struttura

    Grazie, ora funziona perfettamente e sono riuscito a capire anche meglio l'argomento puntatori/array/strutture; grazie ancora e buone feste!
Devi accedere o registrarti per scrivere nel forum
4 risposte