Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87

    [C] passaggio di un vettore di puntatori a struct ad un sottoprogramma

    Ciao a tutti!,come da titolo sto impazzendo cercando di capire come si faccia a mandare un vettore di puntatori a struct ad un sottoprogramma,per esempio

    typedef struct{int a,int b,int c}Prova;

    Prova *vett[N],pippo[N],pluto[N];

    voglio mandare uno di questi tre vettori di puntatori ad un sottoprogramma,come glielo passo?

    ho provato le seguenti combinazioni:

    funzione(vett);
    funzione(Prova *vettore)


    funzione(vett);
    funzione(Prova vettore)


    funzione(*vett);
    funzione(Prova *vettore)


    funzione(vett);
    funzione(Prova &vettore)


    funzione(*vett);
    funzione(Prova &vettore)


    funzione(&vett);
    funzione(Prova &vettore)


    funzione(&vett);
    funzione(Prova *vettore)



    sulle slide non ne parla minimamente,quindi non ho la minima idea di cosa stia facendo,quando passavo un indirizzo solitamente bastava una cosa del genre


    funzione(vett);
    funzione(Prova *vettore)

    forse ho frainteso, è un vettore di puntatori giusto?

    Grazie mille.
    Ultima modifica di Satiro88; 17-11-2013 a 19:11

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Perché tutte quelle prove? Dove hai avuto errori? Non ne parli ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    codice:
    funzione(vett);
    tipo funzione(Prova *vett[]) {
      //...
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    87
    Grazie alla fine ho scoperto che aveva bisogno di due asterischi,trattandosi di un vettore di puntatori si aspettava due puntatori in entrata probabilmente....ora il problema è diverso,il programma procede liscio finchè non assegno a uno di quei puntatori un certo elemento,io vi posto quello che sto facendo,trattenente le risate,ma il professore s'è fissato con i maiali XD

    codice:
    #define N 100
    
    
    typedef struct{
            int giorno;
            int mese;
            int anno;
            }Data;
    typedef struct{
            char nome[20];
            float peso;
            Data annonascita;
            float popolarita;
            }Maialino;
    typedef struct{
            Maialino pigs[N];
            int num_maialini;
            }Allevamento;
     
            
    /*->CONFRONTO INTERI<-*/        
    int confronta(int a,int b)
    {
        printf("ciao c");
         if(a>b)
         {
                printf("bau");
                return 1;
         }
         if(a<b)
         {
                return -1;
         }
         if(a==b)
         {
                 return 0;
         }
    }
    /*->ORDINA DATE<-*/void ordina_data(int num_maialini,Maialino *ord_data[N],Allevamento &citta)     
    {                                                     //ATTENZIONE già di per se ogni elemento di quel vettore che mandiamo è un puntatore,inoltre vogliamo mandarglielo per indirizzo
       int i,j,result;                                          //servono quindi due asterischi
          
       for(i=0;i<num_maialini-1;i++)
       {
            for(j=0;j=num_maialini-1;j++)
            {
                                         result=confronta(citta.pigs[i].annonascita.anno,citta.pigs[j+1].annonascita.anno);
                                         switch(result){
                                                        case 1:
                                                               *ord_data[i]=citta.pigs[j+1];
                                                               break;
                                                               
                                                        case -1:
                                                               printf("ciao e");
                                                               *ord_data[i]=citta.pigs[i];
                                                               printf("ciao f");
                                                               break;
                                                        case 0:
                                                               result=confronta(citta.pigs[i].annonascita.mese,citta.pigs[j+1].annonascita.mese);//nel caso l'anno di nascita sia uguale passa al mese
                                                               break;
                                                               
                                                               switch(result){
                                                                              case 1:
                                                                                      *ord_data[i]=citta.pigs[j+1];    
                                                                                      break;    
                                                                              case -1:
                                                                                      *ord_data[i]=citta.pigs[i];
                                                                                      break;
                                                                              case 0:
                                                                                      result=confronta(citta.pigs[i].annonascita.giorno,citta.pigs[j+1].annonascita.giorno);
                                                                                      break;
                                                                                      
                                                                                      switch(result){
                                                                                                     case 1:
                                                                                                             *ord_data[i]=citta.pigs[j+1];
                                                                                                             break;                                                                                                       
                                                                                                     case -1:
                                                                                                             *ord_data[i]=citta.pigs[i];
                                                                                                             break;
                                                                                                     case 0:
                                                                                                             break;
                                                                                                    }
                                                                            }
                                                        }            
                                                                  
                                         
            }                       
       }                                             
    }
    il problema è nella funzione ordina data tra "ciao e" e "ciao f" a quanto pare,visto che stampa solo "ciao e",viene eseguito è,cioè se premo F9 non dice nulla e va,ma quando inserisco tutti i dati arriva a stampare "ciao e" e viene fuori il messaggio di windows "il programma ha smesso di funzionare"

    non riesco a caricarla meglio di così,nell'anteprima mi mostra il messaggio in un certo modo ma quando invio mi cambia tutto e viene uno schifo nel punto degli switch,riuscite a capire?sono 3 switch concatenati
    Ultima modifica di Satiro88; 18-11-2013 a 11:52

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 © 2024 vBulletin Solutions, Inc. All rights reserved.