Maison  >  Article  >  développement back-end  >  Pourquoi l'affectation du pointeur dans les fonctions Go n'affecte-t-elle parfois pas la valeur d'origine ?

Pourquoi l'affectation du pointeur dans les fonctions Go n'affecte-t-elle parfois pas la valeur d'origine ?

DDD
DDDoriginal
2024-10-28 01:38:02148parcourir

Why Does Pointer Assignment in Go Functions Sometimes Not Affect the Original Value?

Affectation d'un pointeur dans les fonctions Go : pourquoi des résultats différents ?

Lorsque vous passez un pointeur vers une fonction dans Go, il est crucial de comprendre comment le le pointeur est utilisé et ses implications sur la valeur d'origine. Cette discussion tourne autour d'un extrait de code qui passe un pointeur vers une structure Test, dans l'intention de modifier son champ Valeur.

Le premier extrait de code, malgré la tentative de modification du champ Valeur en attribuant une nouvelle structure Test au pointeur (*p = Test{4}), ne parvient pas à modifier la valeur réelle. En effet, il réaffecte simplement la variable de pointeur p, et non la valeur pointée. La variable p dans la fonction f() existe indépendamment et n'a aucun impact sur la valeur pointée par la variable p dans main().

En revanche, le deuxième extrait de code, où p.Value est explicitement défini sur 4, modifie avec succès le champ Valeur. En effet, l'opérateur déréférence le pointeur, permettant l'accès et la modification de la valeur réelle pointée.

En remarque supplémentaire, il est possible de modifier l'adresse stockée dans la variable de pointeur de la fonction main() en passant son adresse (*) à la fonction f(). Cependant, cette approche est moins efficace et moins pratique que la modification directe de la valeur pointée à l'aide de p.Value.

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