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
Susan Sarandonoriginal
2024-12-03 02:57:09952parcourir

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

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!

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);

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] = {};

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:
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