Pointeur vers une struct à l'intérieur d'une structure (struct); Comment accéder sans erreurs?

Autant que je sache, si l'élément à l'intérieur d'une structure est un pointeur, vous l'appelez avec ->, si c'est une valeur normale, il est utilisé ..

ici mon typedefs:

typedef struct
{
    char name[50];
    int quantity;
}ing;

typedef struct
{
    char name[50];
    ing *n;
    int price, n_ing, max_producity;
}prod;

puis-je déclarer un prod a; et je allouer a->n=malloc(n*sizeof(ing));.
Mais lorsque j'essaie d'accéder à a.n->name il me donne l'erreur.

Tous les 4 combinaisons me donne l'erreur "error: invalid argument de type de '->' (, 'de prod' (ou 'ing'))" ou "erreur: indice de la valeur n'est ni tableau, ni pointeur, ni vecteur".

Pourquoi?


    int ret_max_producity(prod a, ing n, int dim_n)
    {
        int max_prod=32100, i;
        for(i=0; i<a.n_ing; i++)
        {
/* here!->*/if((n[find_ing(n, a.n[i]->name, dim_n)].quantity)/(a.n->quantity)<max_prod)
            {
/* here!->*/    max_prod=(n[find_ing(n ,a.n[i]->name, dim_n)].quantity/a.n->quantity);
            }
        }
        if(max_prod==32100)
        {
            printf("ERROR WHILE FINDING MAX PRODUCITY FOR PRODUCT %s, ABORTING", a.name);
            system("pause");
            exit(EXIT_FAILURE);
        }
        return max_prod;
    }

int find_ing(ing v, char *s, int dim)
{
    int i;
    for(i=0; i<dim; i++)
    {
        if(strcmp(s, v.name)==0)
        {
            return i;
        }
    }
    printf("\n\nERROR WHILE FINDING INGREDIENT %s IN VECTOR, ABORTING...", s);
    system("pause");
    exit(EXIT_FAILURE);
}

Pointeur vers une struct à l'intérieur d'une structure (struct); Comment accéder sans erreurs?

  • Il serait intéressant de lire un tutoriel sur le C les opérateurs, ce qui est le plus certainement couvert dans n'importe quel débutant-niveau de langue tutoriel.
  • Ce n'est pas que si l'élément à l'INTÉRIEUR de la structure est un pointeur que vous utilisez -> c'est quand le symbole lui-MÊME est un pointeur de variable que vous utilisez '-> " Quand le symbole est de type struct foo puis vous utilisez un '.'