struct c allouer dynamiquement de la mémoire

Je suis en utilisant une structure (struct) et je veux initialiser un maximum de 10 ports. Cependant, lorsque le programme est en marche, il pourrait être beaucoup moins, nous ne savons pas jusqu'à ce moment de l'exécution. Cependant, ce sera le max. Je n'ai jamais fait struct comme ça avant, comme je l'ai normalement allouer dynamiquement à l'aide de calloc et delcare comme ceci *les ports comme le type de la valeur.

Cependant, je ne peux pas comprendre ce

*ports[MAX_PORTS]. Am I creating 10 pointers that point to port objects?

Et

*ports = (struct port_t*) calloc(2, sizeof(*ports)); 

On dirait que je suis l'allocation d'un seul pointeur qui pointe vers 2 ports objets alloués sur le free store?

Je ne comprends pas pourquoi je suis à l'aide d'un opérateur de point avec une flèche de l'opérateur?
les ports[0]->port_id = 20;
printf("port_id: %d\n", les ports[0]->port_id);

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

#define MAX_PORTS 10

struct port_t
{
    int port_id;
    char name;
} *ports[MAX_PORTS];

int main(void)
{
    *ports = (struct port_t*) calloc(2, sizeof(*ports));

    ports[0]->port_id = 20;

    printf("port_id: %d\n", ports[0]->port_id);

    return 0;
}

normalement, ce que j'ai fait dans le passé est le présent:

struct port_t
{
    int port_id;
    char name;
} *ports;

ports = (struct port_t*) calloc(2, sizeof(*ports));

Et ensuite affecter à l'une des conditions suivantes ci-dessous. Toutefois, l'ancien programmeur a déclaré tout comme je l'ai affiché en haut donc je ne peux pas changer quoi que ce soit.

ports[0].port_id = 10;
ports->port_id = 10;

Un grand merci pour toutes les suggestions,

compilier gcc C99

OriginalL'auteur ant2009 | 2009-03-06