Maison développement back-end Tutoriel Python Aller à la comparaison des langages en passant le paramètre de référence C++

Aller à la comparaison des langages en passant le paramètre de référence C++

Sep 02, 2017 am 11:16 AM
对比 引用 语言

Cet article explique principalement si Go a un passage de paramètres par référence (par rapport au C++). Les amis qui en ont besoin peuvent se référer à

Trois méthodes de passage de paramètres en C++

Passage de valeurs :

La méthode la plus courante de transmission de paramètres. Les paramètres formels d'une fonction sont des copies des paramètres réels. n'affectera pas les paramètres formels en dehors de la fonction. Généralement, le passage de valeur est utilisé lors de la modification de paramètres dans une fonction sans affecter l'appelant.

Passage de pointeur

Le paramètre formel est un pointeur vers l'adresse du paramètre réel, comme son nom l'indique, lorsque le contenu pointé par le paramètre formel est manipulé. dans la fonction, le paramètre lui-même sera modifié.

Passage par référence

En C++, une référence est un alias pour une variable, qui est en fait la même chose et existe également à la même adresse en mémoire. En d’autres termes, partout où une référence est manipulée, la variable référencée est directement manipulée.

Regardez la démo ci-dessous :


#include <iostream>
//值传递
void func1(int a) {
  std::cout << "值传递,变量地址:" << &a << ", 变量值:" << a << std::endl;
  a ++ ;
}
//指针传递
void func2 (int* a) {
  std::cout << "指针传递,变量地址:" << a << ", 变量值:" << *a << std::endl;
  *a = *a + 1;
}
//引用传递
void func3 (int& a) {
  std::cout << "指针传递,变量地址:" << &a << ", 变量值:" << a << std::endl;
  a ++;
}
int main() {
  int a = 5;
  std::cout << "变量实际地址:" << &a << ", 变量值:" << a << std::endl;
  func1(a);
  std::cout << "值传递操作后,变量值:" << a << std::endl;
  std::cout << "变量实际地址:" << &a << ", 变量值:" << a << std::endl;
  func2(&a);
  std::cout << "指针传递操作后,变量值:" << a << std::endl;
  std::cout << "变量实际地址:" << &a << ", 变量值:" << a << std::endl;
  func3(a);
  std::cout << "引用传递操作后,变量值:" << a << std::endl;
  return 0;
}
Copier après la connexion
Le résultat de sortie est le suivant :

Adresse réelle de la variable : 0x28feac, variable valeur : 5

Transfert de valeur, adresse variable : 0x28fe90, valeur variable : 5
Après l'opération de transfert de valeur, valeur variable : 5
Adresse réelle de la variable : 0x28feac, valeur variable : 5
Transfert de pointeur, variable adresse : 0x28feac, valeur variable : 5
Après l'opération de transfert de pointeur, valeur variable : 6
Adresse réelle de la variable : 0x28feac, valeur variable : 6
Transfert de pointeur, adresse variable : 0x28feac, valeur variable : 6
Après l'opération de transfert de référence, Valeur de la variable : 7

Passage des paramètres dans Go

Ce qui précède présente les trois méthodes de passage des paramètres de C++, le passage de valeurs et le passage de pointeurs sont faciles à comprendre, alors Go dispose-t-il également de ces méthodes de passage de paramètres ? Cela a suscité une controverse, mais par rapport au concept de passage de références en C++, on peut dire que Go n'a pas de méthode de passage de références. Pourquoi je dis cela ? Parce que Go n'a pas le concept de références variables. Mais Go a des types de référence, qui seront expliqués plus tard.

Regardons d'abord un exemple de transmission de valeurs et de pointeurs dans Go :


package main
import (
  "fmt"
)
func main() {
  a := 1
  fmt.Println( "变量实际地址:", &a, "变量值:", a)
  func1 (a)
  fmt.Println( "值传递操作后,变量值:", a)
  fmt.Println( "变量实际地址:", &a, "变量值:", a)
  func2(&a)
  fmt.Println( "指针传递操作后,变量值:", a)
}
//值传递
func func1 (a int) {
  a++
  fmt.Println( "值传递,变量地址:", &a, "变量值:", a)
}
//指针传递
func func2 (a *int) {
  *a = *a + 1
  fmt.Println( "指针传递,变量地址:", a, "变量值:", *a)
}
Copier après la connexion
Le résultat de sortie est le suivant :

L'adresse réelle de la variable : 0xc04203c1d0 Valeur de la variable : 1

Transfert de valeur, adresse de la variable : 0xc04203c210 Valeur de la variable : 2
Après l'opération de transfert de valeur, valeur de la variable : 1
Adresse réelle de la variable : 0xc04203c1d0 Variable valeur : 1
Transfert de pointeur, adresse variable : 0xc04203c1d0 Valeur de la variable : 2
Après l'opération de transfert de pointeur, valeur de variable : 2
On peut voir que le transfert de valeur et le transfert de pointeur des types de base de Go ne sont pas différent du C++, mais il n’a pas de concept de références variables. Alors, comment comprenez-vous les types de référence de Go ?

Types de référence de Go

Dans Go, les types de référence incluent des tranches, des dictionnaires, des canaux, etc. Prenons l'exemple du découpage. Le fait de passer une tranche est-il une référence ?

Par exemple :


package main
import (
  "fmt"
)
func main() {
  m1 := make([]string, 1)
  m1[0] = "test"
  fmt.Println("调用 func1 前 m1 值:", m1)
  func1(m1)
  fmt.Println("调用 func1 后 m1 值:", m1)
}
func func1 (a []string) {
  a[0] = "val1"
  fmt.Println("func1中:", a)
}
Copier après la connexion
Le résultat de sortie est le suivant :

Valeur M1 avant d'appeler func1 : [test]

Dans func1 : [val1]

La valeur de m1 après l'appel de func1 : [val1]

La modification de la tranche dans la fonction affecte la valeur du paramètre réel. Cela signifie-t-il qu'il s'agit d'un passage par référence ?

En fait non. Pour répondre à cette question, il faut d'abord savoir si la fonction appelante slice m1 a changé. Nous devons d’abord comprendre la nature du découpage.

Une tranche est une description d'un fragment de tableau. Il contient un pointeur vers le tableau, la longueur du fragment.

En d'autres termes, ce que nous imprimons ci-dessus n'est pas la tranche elle-même, mais le tableau pointé par la tranche. Pour un autre exemple, vérifiez si la tranche a changé.


  package main
import (
  "fmt"
)
func main() {
  m1 := make([]string, 1)
  m1[0] = "test"
  fmt.Println("调用 func1 前 m1 值:", m1, cap(m1))
  func1(m1)
  fmt.Println("调用 func1 后 m1 值:", m1, cap(m1))
}
func func1 (a []string) {
  a = append(a, "val1")
  fmt.Println("func1中:", a, cap(a))
}
Copier après la connexion
Le résultat de sortie est le suivant :

La valeur de m1 avant d'appeler func1 : [test] 1

In func1 : [test val1 ] 2

La valeur de m1 après l'appel de func1 : [test] 1

Ce résultat montre que la tranche n'a pas changé avant et après l'appel. Le soi-disant "changement" dans l'exemple précédent est en fait que les éléments du tableau pointés par le pointeur vers le tableau dans la tranche ont changé. Cette phrase est peut-être un peu gênante, mais elle est en fait vraie. Prouver une fois de plus que le passage de paramètres de types référence n'est pas un passage par référence.

Je veux bien comprendre qu'une tranche est une description d'un fragment de tableau. Il contient le pointeur vers le tableau et la longueur du fragment. Si vous êtes intéressé, vous pouvez lire cet article : http://www.jb51.net/kf/201604/499045.html. Découvrez le modèle de mémoire du découpage.

Résumé

Le résumé est très simple, et le langage doit aussi voir à travers le phénomène pour en voir l'essence. Il y a aussi la conclusion de cet article qu'il faut retenir :

Il n'y a pas de passage par référence dans Go.

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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

3 façons de changer de langue sur iPhone 3 façons de changer de langue sur iPhone Feb 02, 2024 pm 04:12 PM

Ce n'est un secret pour personne que l'iPhone est l'un des gadgets électroniques les plus conviviaux, et l'une des raisons pour cela est qu'il peut être facilement personnalisé à votre guise. Dans Personnalisation, vous pouvez changer la langue en une langue différente de celle que vous avez sélectionnée lors de la configuration de votre iPhone. Si vous maîtrisez plusieurs langues ou si le paramètre de langue de votre iPhone est incorrect, vous pouvez le modifier comme nous l'expliquons ci-dessous. Comment changer la langue de l'iPhone [3 méthodes] iOS permet aux utilisateurs de changer librement la langue préférée sur l'iPhone pour s'adapter aux différents besoins. Vous pouvez changer la langue d'interaction avec Siri pour faciliter la communication avec l'assistant vocal. Dans le même temps, lorsque vous utilisez le clavier local, vous pouvez facilement basculer entre plusieurs langues pour améliorer l'efficacité de la saisie.

Comparaison approfondie : Vivox100 ou Vivox100Pro, lequel vaut le plus la peine d'être acheté ? Comparaison approfondie : Vivox100 ou Vivox100Pro, lequel vaut le plus la peine d'être acheté ? Mar 22, 2024 pm 02:06 PM

Sur le marché actuel des smartphones, les consommateurs sont confrontés à de plus en plus de choix. Avec le développement continu de la technologie, les fabricants de téléphones mobiles ont lancé de plus en plus de modèles et de styles, parmi lesquels Vivox100 et Vivox100Pro sont sans aucun doute deux produits qui ont attiré beaucoup d'attention. Les deux téléphones mobiles proviennent de la célèbre marque Vivox, mais ils présentent certaines différences en termes de fonctions, de performances et de prix. Alors face à ces deux téléphones mobiles, lequel vaut le plus la peine d'être acheté ? Il existe des différences évidentes dans la conception de l'apparence entre Vivox100 et Vivox100Pro.

Lequel a le plus de potentiel, la pièce SOL ou la pièce BCH ? Quelle est la différence entre la pièce SOL et la pièce BCH ? Lequel a le plus de potentiel, la pièce SOL ou la pièce BCH ? Quelle est la différence entre la pièce SOL et la pièce BCH ? Apr 25, 2024 am 09:07 AM

Actuellement, les pièces potentielles favorisées par le cercle monétaire incluent la pièce SOL et la pièce BCH. SOL est le jeton natif de la plate-forme blockchain Solana. BCH est le jeton du projet BitcoinCash, qui est une monnaie fork de Bitcoin. Parce qu'ils ont des caractéristiques techniques, des scénarios d'application et des orientations de développement différents, il est difficile pour les investisseurs de faire un choix entre les deux. J'aimerais analyser lequel a le plus de potentiel, la monnaie SOL ou le BCH ? Investissez à nouveau. Cependant, la comparaison des devises nécessite une analyse complète basée sur le marché, les perspectives de développement, la solidité du projet, etc. Ensuite, l'éditeur vous le dira en détail. Lequel a le plus de potentiel, la pièce SOL ou le BCH ? En comparaison, la pièce SOL a plus de potentiel. Déterminer laquelle a le plus de potentiel, la pièce SOL ou BCH, est une question compliquée car elle dépend de nombreux facteurs.

Comparaison des performances de Windows 10 et Windows 11 : lequel est le meilleur ? Comparaison des performances de Windows 10 et Windows 11 : lequel est le meilleur ? Mar 28, 2024 am 09:00 AM

Comparaison des performances de Windows 10 et Windows 11 : lequel est le meilleur ? Avec le développement et les progrès continus de la technologie, les systèmes d’exploitation sont constamment mis à jour et mis à niveau. En tant que l'un des plus grands développeurs de systèmes d'exploitation au monde, la série de systèmes d'exploitation Windows de Microsoft a toujours attiré beaucoup d'attention de la part des utilisateurs. En 2021, Microsoft a lancé le système d’exploitation Windows 11, ce qui a suscité de nombreuses discussions et attentions. Alors, quelle est la différence de performances entre Windows 10 et Windows 11 ?

Comparaison des box TV Huawei, ZTE, Tmall et Xiaomi Comparaison des box TV Huawei, ZTE, Tmall et Xiaomi Feb 02, 2024 pm 04:42 PM

Les box TV, en tant qu'appareil important qui connecte Internet et la télévision, sont devenues de plus en plus populaires ces dernières années. Avec la popularité des téléviseurs intelligents, les consommateurs privilégient de plus en plus les marques de boîtiers TV telles que Tmall, Xiaomi, ZTE et Huawei. Afin d’aider les lecteurs à choisir le boîtier TV qui leur convient le mieux, cet article proposera une comparaison approfondie des caractéristiques et des avantages de ces quatre boîtiers TV. 1. Huawei TV Box : L'expérience audiovisuelle intelligente est excellente et peut offrir une expérience visuelle fluide. Huawei TV Box dispose d'un processeur puissant et d'une qualité d'image haute définition. Tels que la vidéo en ligne et les applications riches intégrées, la musique et les jeux, etc., il prend en charge une variété de formats audio et vidéo. Le boîtier TV Huawei dispose également d'une fonction de commande vocale, ce qui rend l'utilisation plus pratique. Vous pouvez facilement diffuser le contenu de votre téléphone mobile sur l'écran du téléviseur. Sa diffusion en un clic.

Mar 22, 2024 pm 02:33 PM

Évaluation comparative de Vivox100 et Vivox100Pro : Lequel préférez-vous ? À mesure que les smartphones deviennent de plus en plus populaires et puissants, la demande d'accessoires de téléphonie mobile augmente également. En tant qu'élément indispensable des accessoires de téléphonie mobile, les écouteurs jouent un rôle important dans la vie quotidienne et au travail des gens. Parmi les nombreuses marques de casques, Vivox100 et Vivox100Pro sont deux produits qui ont beaucoup retenu l'attention. Aujourd'hui, nous allons procéder à une évaluation comparative détaillée de ces deux écouteurs pour voir leurs avantages et inconvénients.

Comparaison des performances et avantages et inconvénients du langage Go et d'autres langages de programmation Comparaison des performances et avantages et inconvénients du langage Go et d'autres langages de programmation Mar 07, 2024 pm 12:54 PM

Titre : Comparaison des performances, avantages et inconvénients du langage Go et d'autres langages de programmation Avec le développement continu de la technologie informatique, le choix du langage de programmation devient de plus en plus critique, parmi lesquels les performances sont une considération importante. Cet article prendra le langage Go comme exemple pour comparer ses performances avec d'autres langages de programmation courants et analyser leurs avantages et inconvénients respectifs. 1. Présentation du langage Go Le langage Go est un langage de programmation open source développé par Google. Il présente les caractéristiques d'une compilation rapide, d'une concurrence efficace, d'une concision et d'une lisibilité aisée. Il convient au développement de services réseau, de systèmes distribués, de cloud computing et de technologies de pointe. d'autres domaines. Aller

Comment définir la langue de l'ordinateur Win10 sur le chinois ? Comment définir la langue de l'ordinateur Win10 sur le chinois ? Jan 05, 2024 pm 06:51 PM

Parfois, nous installons simplement le système informatique et constatons que le système est en anglais. Dans ce cas, nous devons changer la langue de l'ordinateur en chinois. Alors, comment changer la langue de l'ordinateur en chinois dans le système Win10 ? . Comment changer la langue de l'ordinateur dans Win10 en chinois 1. Allumez l'ordinateur et cliquez sur le bouton Démarrer dans le coin inférieur gauche. 2. Cliquez sur l'option de paramètres à gauche. 3. Sélectionnez « Heure et langue » sur la page qui s'ouvre. 4. Après l'ouverture, cliquez sur « Langue » sur la gauche. 5. Ici, vous pouvez définir la langue de l'ordinateur souhaitée.

See all articles