Maison > développement back-end > Golang > le corps du texte

Quelles valeurs ont une sémantique de pointeur ?

WBOY
Libérer: 2024-02-10 21:30:12
avant
463 Les gens l'ont consulté

Quelles valeurs ont une sémantique de pointeur ?

L'éditeur PHP Banana répondra à une question courante pour vous dans cet article : "Quelles valeurs ont une sémantique de pointeur ?" En PHP, il existe certains types spécifiques de valeurs qui ont une sémantique de pointeur, ce qui signifie qu'elles le sont. en mémoire. Géré différemment des autres types de valeurs. Plus précisément, les tableaux et les objets sont des valeurs avec une sémantique de pointeur. Lorsque nous attribuons un tableau ou un objet à une autre variable, nous copions en fait le pointeur vers le tableau ou l'objet d'origine vers la nouvelle variable. Cela signifie que toute modification apportée à la nouvelle variable affectera le tableau ou l'objet d'origine. Pour d'autres types de valeurs, tels que les entiers, les nombres à virgule flottante et les chaînes, l'opération d'affectation copie en fait la valeur d'origine dans la nouvelle variable au lieu de copier le pointeur. Par conséquent, les modifications apportées à la nouvelle variable n’affecteront pas la valeur d’origine. C'est le concept de valeurs en PHP ayant une sémantique de pointeur.

Contenu des questions

Dans Go, tout est transmis par valeur. L’appel d’une fonction avec une valeur entraîne la copie de la valeur et la fonction accède uniquement à une copie de la valeur.

La sémantique du pointeur permet de passer quelque chose "par valeur" pour mettre à jour la valeur "originale", comme si nous lui passions un pointeur.

Quels types ont une sémantique de pointeur ?

Solution

Si vous souhaitez modifier la valeur passée à la fonction, tous les types de variables nécessitent l'utilisation de pointeurs.

La seule exception est que certains types de référence peuvent modifier leurs membres sans passer de pointeur, mais la valeur du type ne peut pas être modifiée sans utiliser de pointeur.

Exemple (playground) de modification des membres d'une tranche (mais pas de la tranche elle-même) :

func main() {
    s := []int{1, 2, 3, 4}
    modifyslicemember(s)
    fmt.println(s) // [90 2 3 4]
}

func modifyslicemember(s []int) {
    if len(s) > 0 {
        s[0] = 99
    }
}
Copier après la connexion

Pour modifier la tranche elle-même (playground) :

func main() {
    s := []int{1, 2, 3, 4}
    modifySlice(&s)
    fmt.Println(s) // []
}

func modifySlice(s *[]int) {
    *s = make([]int, 0)
}
Copier après la connexion

Cependant, veuillez noter que même dans ce cas, à proprement parler, nous ne modifions pas vraiment la valeur transmise. Dans ce cas, la valeur transmise est un pointeur , et ce pointeur ne peut pas être modifié .

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:stackoverflow.com
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!