129 votes

Pourquoi déclarer un struct qui contient uniquement un tableau en C ?

Je suis tombé sur un code contenant les éléments suivants :

Quand est-il judicieux d’utiliser une déclaration comme ça ?

183voto

Blagovest Buyukliev Points 22767

Il vous permet de passer le tableau à une fonction par valeur, ou l’obtenir retournée par valeur à partir d’une fonction.

Les structs peuvent être passés par valeur, contrairement aux tableaux qui se désintègrent en un pointeur dans ces contextes.

82voto

R.. Points 93718

Un autre avantage est qu'il abstraction de la taille, de sorte que vous n'avez pas à utiliser [MAX] partout dans votre code chaque fois que vous déclarez un tel objet. Cela pourrait également être réalisé avec

typedef char ABC[MAX];

mais alors vous avez un problème beaucoup plus important: vous devez être conscient que, ABC est une matrice de type (même si vous ne pouvez pas le voir, quand vous déclarez des variables de type ABC), sinon vous allez faire piquer par le fait qu' ABC signifie quelque chose de différent en fonction de la liste d'arguments contre dans une déclaration de variable ou de la définition.

Un autre avantage est que la structure permet à la suite ajouter d'autres éléments, si vous en avez besoin, sans avoir à réécrire beaucoup de code.

45voto

Bo Persson Points 42821

Vous pouvez copier une structure et renvoyer une structure depuis une fonction.

Vous ne pouvez pas faire cela avec un tableau - sauf si cela fait partie d'une structure!

26voto

MetallicPriest Points 6372

Vous pouvez le copier comme ceci.

 struct ABC a, b;
........
a = b;
 

Pour un tableau, vous devez utiliser la fonction memcpy ou une boucle pour affecter chaque élément.

11voto

Hossein Mobasher Points 1396

Vous pouvez utiliser struct pour créer un nouveau type de données comme une chaîne . vous pouvez définir:

 struct String {
    char Char[MAX];
};
 

ou vous pouvez créer une liste de données que vous pouvez utiliser par argument de fonctions ou la renvoyer dans vos méthodes. La structure est plus flexible qu'un tableau, car elle peut prendre en charge certains opérateurs tels que = et vous pouvez y définir certaines méthodes.

J'espère que c'est utile pour vous :)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X