Je suis tombé sur un code contenant les éléments suivants:
struct ABC {
unsigned long array[MAX];
} abc;
Quand est-il judicieux d'utiliser une déclaration comme celle-ci?
c
arrays
coding-style
struct
Joe.Z
la source
la source
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é avecmais 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 typeABC
) sinon vous serez piqué par le fait queABC
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.
la source
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!
la source
Vous pouvez le copier comme ça.
Pour un tableau, vous devez utiliser la fonction memcpy ou une boucle pour affecter chaque élément.
la source
Vous pouvez utiliser struct pour créer un nouveau type de données comme une chaîne . vous pouvez définir:
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 :)
la source
Un autre avantage de l'utilisation d'un tel
struct
est qu'il applique la sécurité de type partout où un telstruct
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 atypedef
pour lui: cela présente certains des avantages dustruct
- • 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. Deuxtypedef
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 letypedef
sans*
dans un argument de fonction, cela équivaut àchar *
une réduction drastique de la sécurité de type.En résumé :
la source
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.
la source
struct
contenant uniquement un tableau.