Maison > développement back-end > Golang > Pourquoi les tableaux de structures vides dans Go sont-ils parfois comparables même si leurs pointeurs sont différents ?

Pourquoi les tableaux de structures vides dans Go sont-ils parfois comparables même si leurs pointeurs sont différents ?

Susan Sarandon
Libérer: 2024-12-24 01:50:19
original
306 Les gens l'ont consulté

Why Do Arrays of Empty Structs in Go Sometimes Compare as Equal Despite Their Pointers Being Different?

Comparaison de tableaux de structures vides : comprendre le comportement des variables

Lorsque vous comparez des tableaux de structures vides dans Go, vous pouvez rencontrer des résultats inattendus. Explorons ce comportement à travers des exemples de code et comprenons pourquoi il se produit.

Considérez le code suivant :

var s, ss struct{} // two empty structs
arr1 := [6]*struct{}{&s} // array with empty struct pointer
arr2 := [6]*struct{}{&ss} // array with empty struct pointer
fmt.Println(&s == &ss, arr1 == arr2)  // false, true
Copier après la connexion

Ici, nous définissons les structures vides s et ss, initialisons les tableaux arr1 et arr2 avec des pointeurs vers ces structures et imprimez les résultats de la comparaison. Étonnamment, même si &s et &ss ne sont pas égaux, arr1 et arr2 sont égaux.

Pour comprendre cela, nous devons nous référer aux spécifications Go. La spécification des valeurs de pointeur indique qu'elles sont égales si elles pointent vers la même variable ou si les deux ont une valeur nulle. Surtout, il note que les pointeurs vers des variables distinctes de taille nulle « peuvent être égaux ou non ».

De plus, les structures sans champs ont une taille nulle. Par conséquent, &s et &ss pointent vers des variables distinctes de taille nulle, et la comparaison &s == &ss peut être évaluée comme vraie ou fausse.

De même, le comportement de la comparaison de tableaux arr1 == arr2 n'est pas garanti. La spécification des variables de taille nulle indique qu'elles "peuvent" avoir la même adresse en mémoire. Ainsi, arr1 et arr2 peuvent être égaux ou non, et le résultat peut varier selon les différentes exécutions du programme.

Pour résumer, comparer des pointeurs à des variables distinctes de taille nulle, telles que des structures vides, peut donner des résultats imprévisibles. résultats. Bien que vous puissiez observer un résultat particulier une fois, il peut différer lors des exécutions ultérieures en raison de la manière dont le compilateur optimise l'allocation de mémoire.

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