Maison > développement back-end > C++ > L'accès à un tableau 2D en tant que tableau 1D contigu en C est-il un comportement indéfini ?

L'accès à un tableau 2D en tant que tableau 1D contigu en C est-il un comportement indéfini ?

DDD
Libérer: 2024-12-22 02:08:15
original
739 Les gens l'ont consulté

Is Accessing a 2D Array as a Contiguous 1D Array in C Undefined Behavior?

Un tableau 2D peut-il être traité comme un tableau 1D contigu ?

L'abonnement en C entraîne l'ajout de pointeurs suivi d'une indirection. Considérez le code suivant :

int a[25][80];
a[0][1234] = 56;
int* p = &a[0][0];
p[1234] = 56;
Copier après la connexion

La deuxième ligne appelle-t-elle un comportement indéfini ? Qu'en est-il de la quatrième ligne ?

Réponse :

Les deux lignes entraînent un comportement indéfini.

Selon le C standard, l'ajout d'un pointeur à un élément du tableau entraîne un comportement valide uniquement si l'index résultant se trouve dans les limites du tableau. Dans ce cas, a[0] a une taille de 80 et les indices en dehors de cette plage ne sont pas définis.

Explication :

L'indice équivaut à ce qui suit :

a[0][1234] == *(a[0] + 1234)
Copier après la connexion

Puisque a[0] pointe vers le premier élément de la première ligne de a, l'ajout du pointeur a[0] 1234 tente d'accéder à un élément au-delà de la fin de la ligne. Cela entraîne un comportement indéfini.

De même, la quatrième ligne tente de modifier une valeur en dehors des limites de la ligne :

p[1234] == *(p + 1234)
Copier après la connexion

Même si p pointe vers le premier élément de a, en essayant modifier un élément au-delà des limites de sa ligne sous-jacente entraîne un comportement indéfini.

Il est important de noter que ce type de comportement indéfini n'est pas détecté par le compilateur. Par conséquent, il est essentiel de garantir que les opérations arithmétiques des pointeurs restent dans les limites des éléments de tableau valides pendant l'exécution.

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