Réponses:
Il vous permet de passer le tableau à une fonction par valeur, ou de le renvoyer par valeur à partir d'une fonction.
Les structures peuvent être passées par valeur, contrairement aux tableaux qui se désintègrent en pointeur dans ces contextes.
Un autre avantage est qu'il fait abstraction de la taille afin que vous n'ayez pas à utiliser [MAX]
partout dans votre code partout où 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 gros: vous devez être conscient qu'il ABC
s'agit d'un type de tableau (même si vous ne pouvez pas le voir lorsque vous déclarez des variables de type ABC
) sinon vous serez piqué par le fait que ABC
cela signifiera quelque chose de différent dans une liste d'arguments de fonction versus dans une déclaration / définition de variable.
Un autre avantage est que la structure vous permet d'ajouter ultérieurement plus d'éléments si vous en avez besoin, sans avoir à réécrire beaucoup de code.
Vous pouvez copier une structure et renvoyer une structure à partir d'une fonction.
Vous ne pouvez pas faire cela avec un tableau - à moins qu'il ne fasse partie d'une structure!
Vous pouvez le copier comme ça.
struct ABC a, b;
........
a = b;
Pour un tableau, vous devez utiliser la fonction memcpy ou une boucle pour affecter chaque élément.
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 comme = et vous pouvez y définir des méthodes.
J'espère que cela vous sera utile :)
Un autre avantage de l'utilisation d'un tel struct
est qu'il applique la sécurité de type partout où un tel struct
est utilisé; surtout si vous avez deux types constitués de tableaux de même taille utilisés à des fins différentes, ces types vous aideront à éviter d'utiliser accidentellement un tableau de manière inappropriée.
Si vous n'enveloppez pas un tableau dans a struct
, vous pouvez toujours déclarer a typedef
pour lui: cela présente certains des avantages du struct
- • le type est déclaré une fois, • la taille est automatiquement correcte, • l'intention du code devient plus claire, • et le code est plus facile à maintenir - mais vous perdez la ◦ sécurité de type stricte, ◦ la possibilité de copier et de renvoyer des valeurs de type et ◦ la possibilité d'ajouter des membres plus tard sans casser le reste de votre code. Deux typedef
s pour des tableaux nus d'un type donné ne donnent des types différents que s'ils sont de tailles différentes. De plus, si vous utilisez le typedef
sans *
dans un argument de fonction, cela équivaut à char *
une réduction drastique de la sécurité de type.
En résumé :
typedef struct A_s_s { char m[113]; } A_s_t; // Full type safey, assignable
typedef char A_c_t[113]; // Partial type-safety, not assignable
A_s_t v_s(void); // Allowed
A_c_t v_c(void); // Forbidden
void s__v(A_s_t); // Type-safe, pass by value
void sP_v(A_s_t *); // Type-safe
void c__v(A_c_t); // UNSAFE, just means char * (GRRR!)
void cP_v(A_c_t *); // SEMI-safe, accepts any array of 113
Une structure peut contenir des fonctions d'initialisation de tableau, de copie et de finition émulant certains des avantages des paradigmes de gestion de la mémoire POO. En fait, il est très facile d'étendre ce concept pour écrire un utilitaire de gestion de mémoire générique (en utilisant la structure sizeof () pour savoir exactement combien d'octets sont gérés) pour gérer toute structure définie par l'utilisateur. De nombreuses bases de code de production intelligentes écrites en C les utilisent fortement et n'utilisent généralement jamais de tableau à moins que sa portée ne soit très locale.
En fait, pour un tableau incorporé dans une structure, vous pouvez faire d'autres «choses intelligentes» telles que la vérification des limites à chaque fois que vous souhaitez accéder à ce tableau. Encore une fois, à moins que la portée du tableau ne soit très limitée, c'est une mauvaise idée de l'utiliser et de transmettre des informations à travers les programmes. Tôt ou tard, vous rencontrerez des bugs qui vous empêcheront de dormir la nuit et ruineront vos week-ends.
struct
contenant uniquement un tableau.