Passaggio di vettore ad una funzione

di il
5 risposte

Passaggio di vettore ad una funzione

SAlve ragazzi,
mi servirebbe una mano con il passaggio di un vettore per indirizzo ad una funzione che deve modificare il vettore stesso con un'altra funzione.

Mi compila ma con avvertimento (code blocks):
passing argument from incompatible pointer type

e quando faccio girare il programma si blocca nell'inserire il primo parametro come se non sapesse dove inserirlo...

#include <stdio.h>
#include <stdlib.h>

#define NSQUADRE 2

struct giocatore {
char cognome[30];
int goals;
};

struct squadra {
char nome[30];
int numgiocatori;
struct giocatore rosa[40];
};

void insquadra (struct squadra *a);
void incampionato (struct squadra *a[],int n);
void mediagol (struct squadra *a);

int main()
{
struct squadra campionato[NSQUADRE];

incampionato(campionato,NSQUADRE);

return 0;
}

void insquadra(struct squadra *a) {
printf("Inserire nome\n");
scanf ("%s",(*a).nome);
printf("Inserire numero giocatori\n");
scanf("%d",&(*a).numgiocatori);

int i;

for (i=0;i<(*a).numgiocatori;i++) {
printf("Inserire %d giocatore\n",i);
printf("Inserire nome\n");
scanf("%s",(*a).rosa.cognome);
printf("Inserire gol giocatore\n");
scanf("%d",&(*a).rosa.goals);
}
}

void incampionato(struct squadra *a[],int n) {
int i;
for (i=0;i<n;i++) {
insquadra(&(*a));
}
}


void mediagol(struct squadra *a) {
int c=0;
int i;
printf("%d\n",(*a).numgiocatori);
for (i=0;i<(*a).numgiocatori;i++) {
c=c+(*a).rosa.goals;
}
c=c/(*a).numgiocatori;
printf("Media gol squadra=%d\n",c);
}


grazie

5 Risposte

  • Re: Passaggio di vettore ad una funzione

    struct squadra *a[]
    è come
    struct squadra **a
    Perchè la funzione insquadra() l'hai scritta correttamente e la incampionato() no?
  • Re: Passaggio di vettore ad una funzione

    candaluar ha scritto:


    struct squadra *a[]
    è come
    struct squadra **a
    Perchè la funzione insquadra() l'hai scritta correttamente e la incampionato() no?
    E' vero cavolo.. ci stavo sbattendo la testa e non avevo pensato a questa cosa..
    Comunque, non centra il fatto che si stia passando un puntatore a vettore e non a singola struttura ?
  • Re: Passaggio di vettore ad una funzione

    @thefrogger

    Prova questaaa:

    void incampionato(struct squadra a[],int n) {
    int i;
    for (i=0;i<n;i++) {
    insquadra(&a);
    }
    }

  • Re: Passaggio di vettore ad una funzione

    Comunque, non centra il fatto che si stia passando un puntatore a vettore e non a singola struttura ?
    Di solito per passare una struttura ad una funzione si passa il puntatore (come hai correttamente fatto) questo per limitare l'uso dello stack se la struttura fosse particolarmente grande.
    Quindi puoi passare allo stesso modo una singola struttura e un array di strutture; nell'ultimo caso, comunque, è preferibile passare anche il numero di elementi dell'array.
  • Re: Passaggio di vettore ad una funzione

    Dario se usi più strutture ti consiglio di usare "typedef" per una maggiore leggibilità e comprensione.
    Poi ti è anche più facile debuggare(almeno secondo la mia esperienza)
Devi accedere o registrarti per scrivere nel forum
5 risposte