malloc (sizeof (struct élément) de dimensions *); ou malloc (sizeof (struct élément) * 1);

voix
0

J'ai lu un extrait de code de 6.6. Les tableaux et les Pointers

struct element 
{
  float number1;
  int number2;
  char letter;
};

struct element *table;

table = (struct element *)malloc(sizeof(struct element) * size);
for (i = 0; i < size; i++) 
{
  table[i].number1 = 0.0;
  table[i].number2 = 10;
  table[i].letter = 'B';
}

Référence à table = (struct element *)malloc(sizeof(struct element) * size);, je suis confondez avec plus *size:

struct element a une explicite de sa taille de 3

{
  float number1;
  int number2;
  char letter;
};

Si *size, il devrait être 3 * 3 places de mémoire sont mis de côté.

Je suppose que ce doit être un simple table = (struct element *)malloc(sizeof(struct element) 1);

Quel est le problème avec ma déduction?

Créé 20/10/2018 à 03:06
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
6

Dans ce cas, tableest un tableau de element. Dans ce cas, sizen'est pas la taille , elementmais plutôt combien elementssont dans le tableau (ou en d' autres termes, longueur du tableau).

Ceci est un très bon exemple des raisons pour lesquelles il est important de nommer vos variables correctement. Dans ce cas, sizen'est pas le meilleur nom pour cette variable, quelque chose comme countou num_elementsserait plus approprié.

Créé 20/10/2018 à 03:12
source utilisateur

voix
2

Eh bien, je pense que vous êtes confus avec l'utilisation de sizecette ligne

table = (struct element *)malloc(sizeof(struct element) * size);

size ici fait référence à la façon dont le nombre d'entrées de l'élément struct type que vous souhaitez stocker?

Si je veux stocker deux entrées telles alors mon sizesera 2. Si sizeest 1 , alors l' espace pour une seule entrée sera fournie. Chaque entrée aura un espace pour one integer, one float and one character. Cela sizen'a rien à voir avec ce qui est là la intérieur de la structure.

Créé 20/10/2018 à 05:13
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more