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,
OriginalL'auteur ant2009 | 2009-03-06
Vous devez vous connecter pour publier un commentaire.
Oui, tu fais un tableau de dix pointeurs
...mais cette ligne est un non-sens. C'est la même chose comme ceci:
ie. Vous êtes le premier pointeur de suffisamment de mémoire pour les deux ports.
Pour une si petite chose, il ferait beaucoup plus de sens de faire une dizaine de ports, mais pas tous les utiliser:
OriginalL'auteur Jimmy J
Votre premier bloc de code a
qui est un tableau de pointeurs. Cela signifie que plus tard, lorsque vous utilisez
vous êtes un déréférencement le premier pointeur dans le tableau. Il y a aussi une certaine laideur entourant la taille de ce que vous êtes réellement calloc pratiquent. Vous êtes en fait le remplacement de votre tableau de 10 avec un tableau de 2. Ce que vous avez là est généralement moche et sujettes à erreur.
Je crois que vos intentions sont plus le long des lignes de:
Puisque vous êtes à l'aide de C99, vous pourriez éviter de calloc () et malloc(), si vous voulez vraiment en utilisant C99 variable de la déclaration de tableau.
Le truc c'est que depuis qu'il est sur la pile, elle n'est valable qu'à partir de cette fonction et de toute fonction appelée par elle. Une fois de retour de cette fonction, bien entendu, il est libéré.
OriginalL'auteur Ryan Graham
ports est et tableau de pointeurs vers port_t des objets, en faisant des ports[0] vous obtenez un pointeur, ce n'est pas un objet, et vous avez besoin d'y accéder avec ->
Attraper une bonne ressource sur les pointeurs en C et de le lire de bout en bout. Il y a aussi des tutoriels sur la lecture des déclarations C. Vous ne serez pas en mesure de comprendre ce sujet par trouver des réponses à des questions aléatoires.
Ici's un lien vaut la lecture.
OriginalL'auteur kyku