Quels sont les avantages et les inconvénients des tableaux en langage de programmation C?

Ensemble 01:

Pro: il peut contenir la collection d’articles similaires

Con: il ne peut contenir que la collection d’articles similaires

Ensemble 02:

Pro: la mémoire allouée est continue. Vous pouvez incrémenter l’index pour passer à l’élément suivant. Vous pouvez faire référence à n’importe quel élément du tableau à l’aide de son index

Con: la mémoire allouée est continue. Si cette quantité de mémoire requise n’est pas disponible en continu, eh bien, problème! L’insertion et la suppression entre les baies sont fastidieuses à gérer.

Ensemble 03:

Pro: vous pouvez effectuer des opérations sur cette collection homogène d’éléments comme le tri, la recherche, etc.

Inconvénients: si la taille des données augmente énormément (énormes données ainsi qu’une énorme plage d’entiers), les tableaux ne sont pas les structures de données idéales à utiliser.

Ensemble 04:

Pro: de nombreuses autres structures de données peuvent être implémentées à l’aide de tableaux (pile, file d’attente, matrices, etc.)

Inconvénient: la taille statique et aucun mécanisme de vérification de liaison directe est toujours un inconvénient

Pro: cette chose est très basique, vous avez des frais généraux absolument nuls, pas de vérification des limites, pas de perte de cycles en aucune façon

Con le même que ci-dessus. Mais vous pouvez toujours mettre ce pointeur dans une structure un peu plus grande, le placer dans un module et avec cela vous avez une encapsulation. Ou vous le faites en C ++. Ainsi, par exemple, le tableau «sait» en quelque sorte sa longueur. Vous contournez tous les inconvénients si vous en avez besoin. Ce qui revient aux pros: vous n’avez pas de frais généraux si vous n’en avez pas besoin

Résultat:

Les tableaux C / C ++ sont parfaits. Ils sont exactement les blocs de construction primitifs dont vous avez besoin, sans fioritures ou quoi que ce soit que quelqu’un pense que vous devriez avoir, mais ce n’est vraiment pas le cas.

Vous pouvez toujours activer un commutateur de limite de tableau (-fsanitize = bounds) ou même corriger votre gcc pour insérer ce code merdique et lent si vous pensez vraiment, vous en avez besoin pour votre projet. Mais avec C / C ++, vous avez quelque chose qui, à part l’assemblage direct, n’est presque jamais obtenu: un contrôle total.

Vous pouvez créer des tableaux multidimensionnels, vous pouvez créer des tableaux de pointeurs, des listes, des structures arborescentes, des structures arborescentes récursives, des structures arborescentes horizontales récursives, vous pouvez mettre dans votre structure tout ce que Turing peut proposer: vous le ferez fonctionner.

Rapide. Efficace. Incroyablement rapide.

Vous avez de nouvelles fonctionnalités dans votre architecture, qui ne sont pas encore prises en charge par quoi que ce soit? Faites votre propre support, ou allez simplement insérer des bytecodes dans votre programme en cours d’exécution au moment de l’exécution, en vous modifiant automatiquement, en écrivant des programmes sur l’espace de la pile, en effectuant des boucles à déroulement automatique au moment de l’exécution, qui atteignent la limite de la mémoire, appelez le système d’exploitation et commandez un nouvel espace, continuez avec dérouler et juste le faire.

La limite, c’est votre imagination.

Et pas une vérification des limites de votre langue. Ou le concepteur qui pense, il a le droit de vous dire à quel point le bon code fonctionne.

Tout est un outil. Tout a son utilité. Beaucoup de choses sont généralement laides et vous ne devriez pas les faire et je ne les fais pas, mais sur mon établi, il y a des outils désagréables qui deviennent pratiques quand quelque chose va vraiment mal. Je ne laisserais pas les enfants jouer avec eux, mais c’est vraiment bien d’avoir.

Et je ne veux pas les manquer, juste parce que certaines personnes ont deux pouces gauche.

Connaissez vos outils. Sachez quand et comment les utiliser. C’est C, c’est tout le concept et c’est aussi la vraie force du concept de tableau et de pointeur de ce langage. Et pour cette grande vision du fonctionnement de la programmation, C est un tel succès.

C’est un outil que vous pouvez former. Vous pouvez devenir un bâtard meurtrier avec elle ou simplement sauver le monde. C’est entre vos mains ce que vous en faites. Sachez que cela peut être dangereux, car il est tellement puissant. Mais si vous le faites, vous n’avez qu’une des pierres précieuses les plus précieuses que vous puissiez imaginer.

C (et C ++) ont de vrais tableaux multidimensionnels . D’autres langues qui le font, incluent Julia, Fortran, MATLAB et je pense Haskell. Au moins en deux dimensions est important pour l’algèbre linéaire, tandis qu’un langage unidimensionnel peut le “truquer”.

C, C ++, Fortran et Julia n’ont pas d’accès en tête aux tableaux. Cela peut ne pas se produire pour C (et je pense que C ++) sauf si vous utilisez le mot clé restrict , car C a un problème d’alias .

Les langues vérifiées liées, sont plus sûres , mais ont des frais généraux. Java est un exemple, qui en plus n’a que des tableaux unidimensionnels (ou des tableaux irréguliers à simuler, il existe également d’autres façons – qui perdent l’avantage de la vérification des limites).

Julia est vérifiée en termes de limites, comme Java, mais contrairement à Java, vous pouvez ignorer les vérifications à l’échelle mondiale et locale. Pour les deux langues, une partie des frais généraux (que vous n’avez pas désactivés) peut disparaître si vous êtes chanceux.

Un vecteur est une poignée pour accéder à la mémoire du tas tandis que std::array est la mémoire de la pile, donc il y a un gain de performances en utilisant l’option de mémoire de pile plutôt qu’en utilisant le stockage de mémoire de tas anonyme. En fait, vous devez accéder à la mémoire du tas via un pointeur où la variable sur le tas est anonyme mais le pointeur est nommé.

Le tableau est:
1. Taille fixe “Vous ne pouvez pas changer la taille du tableau que vous avez réservé en mémoire”
2. «Éléments séquentiels stockés dans des lieux litigieux en mémoire»
3. «Les éléments homogènes sont du même type de données»

avantages:
1. Accès plus rapide aux éléments à l’aide de l’index des éléments

les inconvénients:
1. Taille fixe “la taille du tableau est statique”
2. Complexe pour insérer ou supprimer des données dans une position qui est déjà occupée, car vous devez déplacer toutes les données, ce qui coûte du temps.

Je répondrais de façon abstraite. Jetez un œil à un langage de tableau et changez votre façon de penser, puis concevez votre solution, puis codez-la.

Par exemple. J… et voici le livre des programmeurs J for C. Contenu de Jforc

Les avantages sont: vous en avez besoin si vous avez besoin d’une collection d’éléments similaires (même type).

Les inconvénients sont que la longueur du tableau n’est pas incluse d’une manière ou d’une autre dans le pointeur. Vous devez donc le passer comme paramètre supplémentaire et vous assurer de passer la bonne taille / longueur. Sinon, préparez-vous au fameux dépassement de tampon.