Maison > développement back-end > C++ > Pourquoi ne puis-je pas attribuer des tableaux directement, mais je peux le faire dans les structures en C/C ?

Pourquoi ne puis-je pas attribuer des tableaux directement, mais je peux le faire dans les structures en C/C ?

Susan Sarandon
Libérer: 2024-12-19 22:49:09
original
462 Les gens l'ont consulté

Why Can't I Assign Arrays Directly, But I Can Within Structs in C/C  ?

Pourquoi l'attribution par membre d'un tableau n'est prise en charge que dans les structures

Contrairement aux tableaux en général, les tableaux définis dans les structures bénéficient d'une affectation par membre. Bien qu'attribuer un tableau à un autre ne soit pas autorisé (__

num1 = num2;//
), cela devient réalisable au sein des structs (
struct1 = struct2;//&lt ;/pre>__), comme indiqué ci-dessous :</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">int num1[3] = {1,2,3};
int num2[3];
num2 = num1; // "error: invalid array assignment"

struct myStruct { int num[3]; };
struct myStruct struct1 = {{1,2,3}};
struct myStruct struct2;
struct2 = struct1;
Copier après la connexion

Historique et Justification philosophique

Cette disparité découle de l'évolution de C. Dans les premières itérations, les tableaux étaient essentiellement des pointeurs sans informations de taille. Cela a gêné leur affectation, car le compilateur ne disposait pas des données nécessaires. Néanmoins, les tableaux au sein des structures ont bénéficié d'un traitement exceptionnel, héritant de leurs informations de type et de taille de la structure englobante. En conséquence, ils pourraient être attribués par membre dans le contexte de la structure, sans être affectés par les contraintes générales.

Cette pratique a été reprise dans le C et le C modernes, une bizarrerie qui résout les défis de mise en œuvre liés à l'attribution de tableaux ouverts. L'introduction de l'affectation générale des tableaux aurait introduit des problèmes d'ambiguïté et de compatibilité. Ainsi, la limitation a été maintenue et les programmeurs ont été encouragés à utiliser memcpy pour la copie explicite de tableaux.

Exceptions

Les paramètres de fonction sont apparus comme un autre paramètre dans lequel les membres du tableau peuvent être attribué. Considérez le code suivant :

typedef int vec[3];

void f(vec a, vec b) {
    a = b; // pointer assignment
}
Copier après la connexion

Bien que a soit un paramètre de pointeur, l'affectation effectue effectivement une copie par élément, bien qu'elle soit en dehors d'une structure. Cette exception est essentiellement une amélioration qui permet la sémantique des valeurs dans les appels de fonction.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal