この記事では、Go に参照によるパラメータ受け渡しがあるかどうか (C++ と比較して) を主に紹介します。必要な場合は、
C++ の 3 つのパラメータ受け渡しメソッドを参照してください。パラメーターを渡す方法。関数の仮パラメーターは実際のパラメーターのコピーです。関数内で仮パラメーターを変更しても、関数の外部の仮パラメーターには影響しません。一般に、値の受け渡しは、呼び出し元に影響を与えずに関数内のパラメーターを変更する場合に使用されます。 ポインタ渡し
仮引数は、その名の通り、実引数のアドレスを指すポインタであり、関数内で仮引数が指す内容を操作すると、実引数そのものが変更されます。 。
参照渡し
C++ では、参照は変数のエイリアスであり、実際には同じものであり、メモリ内の同じアドレスにも存在します。言い換えれば、参照が操作される場合はどこでも、参照される変数はまったく直接操作されます。
以下のデモを見てください:#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;
}
出力結果は次のとおりです:
変数の実アドレス: 0x28feac、変数値: 5
値の転送、変数アドレス: 0x28fe90、変数値: 5値の後転送操作、変数値: 5
変数の実際のアドレス: 0x28feac、変数値: 5 ポインター転送、変数アドレス: 0x28feac、変数値: 5
ポインター転送操作後、変数値: 6
ポインタ転送、変数アドレス: 0x28feac、変数値: 6
参照転送操作後、変数値: 7
Goでのパラメータの受け渡し
以上、3つのパラメータの受け渡し方法を紹介しました。 C++、値の受け渡しとポインターの受け渡しは簡単だと理解していますが、Go にもこれらのパラメーターの受け渡しメソッドはありますか?これは議論を引き起こしましたが、C++ の参照受け渡しの概念と比較すると、Go には参照受け渡しのメソッドが存在しないと言えます。なぜこんなことを言うのかというと、Go には変数参照の概念がないからです。ただし、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)
}
出力結果は次のとおりです:
変数の実際のアドレス: 0xc04203c1d0 変数値: 1
値の転送、変数アドレス: 0xc04203c210 変数値: 2値転送 演算後、変数値: 1
変数実アドレス: 0xc04203c1d0 変数値: 1 ポインタ転送、変数アドレス: 0xc04203c1d0 変数値: 2
ポインタ転送演算後、変数値: 2
Go の参照型
Go では、参照型にはスライス、辞書、チャネルなどが含まれます。スライスを例に挙げます。スライスを渡すことは参照ですか?
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)
}
出力結果は次のとおりです:
func1 を呼び出す前の m1 の値: [test]
func1 内: [val1]
func1 を呼び出した後の m1 の値: [ val1]
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)) }
出力結果は以下の通りです。
func1を呼び出す前のm1の値: [test] 1
func1の場合: [test val1] 2
func1を呼び出した後のm1の値: [test] 1
以上がGo 言語の比較 C++ 参照パラメータの受け渡しの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

Python 3.6のピクルスファイルのロードレポートエラー:modulenotFounderror:nomodulenamed ...

風光明媚なスポットコメント分析におけるJieba Wordセグメンテーションの問題を解決する方法は?風光明媚なスポットコメントと分析を行っているとき、私たちはしばしばJieba Wordセグメンテーションツールを使用してテキストを処理します...


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境
