Maison > développement back-end > C++ > Pourquoi ne puis-je pas attribuer directement un tableau à un autre en C ?

Pourquoi ne puis-je pas attribuer directement un tableau à un autre en C ?

Susan Sarandon
Libérer: 2024-12-03 02:57:09
original
1025 Les gens l'ont consulté

Why Can't I Directly Assign One Array to Another in C  ?

Tableaux en C : Comprendre les restrictions d'assignabilité

Les tableaux en C présentent un comportement particulier, dont l'un est leur assignabilité restreinte. Voyons pourquoi l'attribution d'un tableau à un autre est interdite, comme illustré par le code suivant :

int numbers[5] = {1, 2, 3};
int values[5] = {0, 0, 0, 0, 0};
values = numbers;  // Error: C2106
Copier après la connexion

Ce code génère l'erreur "erreur C2106 : '=' : l'opérande gauche doit être la valeur l", signalant une tentative d'affectation à un objet non modifiable.

L'erreur survient parce que les tableaux en C sont considérés comme non modifiables ou non attribuables, principalement en raison à une compatibilité ascendante avec C. L'attribution d'un tableau à un autre nécessiterait de copier tous ses éléments, ce qui est très inefficace et sujet aux erreurs.

Au lieu de cela, C encourage l'utilisation de conteneurs de la bibliothèque de modèles standard (STL), comme std :: array ou std :: vector, qui fournissent des fonctionnalités de type tableau efficaces et sécurisées. Par exemple, en utilisant std::array pour obtenir la fonctionnalité souhaitée :

#include <array>

std::array<int, 5> numbers = {1, 2, 3};
std::array<int, 5> values = {};
values = numbers;  // No error!
Copier après la connexion

Dans le cas de tableaux primitifs (comme celui du code original), vous pouvez copier manuellement des éléments à l'aide d'une boucle ou exploiter l' std::copy function:

#include <algorithm>

int numbers[5] = {1, 2, 3};
int values[5] = {};
std::copy(numbers, numbers + 5, values);
Copier après la connexion

De plus, le code fourni montre un raccourci pour initialiser le tableau de valeurs avec des valeurs vides, en tirant parti d'une règle C qui ne fournit pas d'initialiseurs entraîne une initialisation de la valeur à zéro. Par conséquent, les deux extraits de code suivants sont équivalents :

int values[5] = {0, 0, 0, 0, 0};
int values[5] = {};
Copier après la connexion

En comprenant ces nuances, vous pouvez éviter les erreurs d'affectation et travailler efficacement avec des tableaux en C .

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal