Maison >développement back-end >C++ >Pourquoi C et C autorisent-ils l'affectation de tableaux par membres dans les structures mais pas pour les tableaux autonomes ?

Pourquoi C et C autorisent-ils l'affectation de tableaux par membres dans les structures mais pas pour les tableaux autonomes ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-08 01:12:17275parcourir

Why Does C and C   Allow Memberwise Array Assignment in Structs but Not for Standalone Arrays?

Pourquoi l'affectation de tableaux par membres dans les structures est prise en charge en C et C

Bien que l'affectation de tableaux par membres soit généralement interdite en C et C, elle est pris en charge dans les structures. Cette contradiction apparente découle de l'évolution historique de ces langages.

Dans les définitions de structures, les tableaux ont été introduits comme un moyen pratique d'allouer de la mémoire contiguë aux données. Cependant, dans les premières itérations du C, les tableaux n'étaient que de simples pointeurs vers des régions mémoire. L'attribution d'un tableau à un autre entraînait donc une affectation de pointeur, et non une copie par élément.

Ce comportement a persisté même lorsque l'affectation de structure a été ajoutée dans K&R C. Au lieu de définir un opérateur d'affectation distinct pour les structures, le compilateur j'ai simplement utilisé une opération de copie de mémoire (memcpy) pour attribuer tous les membres. Cela incluait effectivement des tableaux dans les structures.

Par conséquent, l'affectation de structure introduisait implicitement une forme d'affectation de tableau dans le contexte des structures. Cependant, cette affectation est restée limitée à l'intérieur des structures, et l'affectation d'un tableau directement à un autre tableau, même s'il est contenu dans une structure, n'est toujours pas prise en charge en C et C .

Cette différenciation entre les tableaux au sein des structures et les tableaux généraux servent à deux fins :

  • Compatibilité : Il garantit une compatibilité ascendante avec le code C existant qui repose sur le pointeur arithmétique et manipulation de tableaux.
  • Sécurité des types : Exiger une copie explicite de la mémoire pour les affectations générales de tableaux permet d'éviter les erreurs et garantit la sécurité des types.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn