GO ---ベース値が基準言語によって渡さと渡されます。

パッケージメイン

インポート(
	"FMT"

/ *
値の転送
パラメータの実際のコピー〔の値の関数の形で【パラメータ
コンテンツに対処するためのすべての変更は、外の世界の実際のパラメータとは何の関係もありません
パラメータなどのすべての基本データ型は値で渡された場合
* /
FUNC ChangeBaseValue(V int型){
	fmt.Printf( "メインます。vアドレス=%P \ n" は、&V)
	V * = 2
	すべてのローカル変数、関数リターンは//解放されたとき(仮パラメータは、ここにVに含まれます)
}

/ *
参照渡し(アドレス転送)
[機能]仮パラメータの記録は、実際のパラメータアドレス[あります]
すべての変更は、実際のコンテンツが直接外の世界のパラメータを変更に対処するためになさ
* /
FUNC ChangeBaseValuePtr(V * int型){
	fmt.Printf( "メインます。vアドレス=%P \ n" は、V)
	* V * = 2
}

Person型構造体{
	年齢はint
}

/ *
値は、構造体を渡します
Pは、実際のパラメータzhangsanのコピーの形でパラメータ値であります
Pは、任意のインパクトzhangsanを持っていないために何でもします
pが生成され実行されている関数のローカル変数、終了する機能が解除されています
* /
FUNC ChangeObjectValue(P人){
	fmt.Printf( "ChangeObjectValue:Pアドレス=%P \ n" は、&P)
	p.Age * = 2
	すべてのローカル変数、関数リターンは//解放されたとき(仮パラメータは、ここにVに含まれます)
}


/ *
基準構造転送(転送アドレス)
正式なパラメータpは、実際の記録パラメータzhansanメモリアドレスです
いかなる修正の内容についてPは、直接zhangsanを変更することです
pが生成され実行されている関数のローカル変数、終了する機能が解除されています
* /
FUNC ChangeObjectValuePtr(P *人){
	fmt.Printf( "ChangeObjectValue:Pアドレス=%P \ n" は、P)
	p.Age * = 2
	すべてのローカル変数、関数リターンは//解放されたとき(仮パラメータは、ここにVに含まれます)
}

/ *
渡された値:パラメータとして配列
スライスやマップ:既存のコンテンツ/要素は、参照によって渡されます
* /
FUNC ChangeContainerValue(配列[3] INT、スライス[] INT、MMAPマップ[ストリング] INT){
	fmt.Printf( "ChangeContainerValue:配列[0]アドレス=%P \ n"、&配列[0])
	fmt.Printf( "ChangeContainerValue:スライス[0]アドレス=%P \ n"、&スライス[0])
	fmt.Printf( "ChangeContainerValue:マップアドレス=%P \ n" は、MMAP)

	配列[0] = 100
	スライス[0] = 200
	MMAP [ "ボス"] = 300
}


ChangeContainerValuePtr FUNC(配列* [3] INT、スライス* [] INT、MMAP *マップ[ストリング] INT){

	(*配列)[0] = 100
	(*スライス)[0] = 200
	(* MMAP)[ "ボス"] = 300
	*スライス=アペンド(*スライス、4)
	(* MMAP) "第4位にランク"] = 4
}


/ *伝送の基本的なタイプの値と参照渡し* /
main021関数(){
	= 10があります。
	fmt.Printf( "主アドレス=%P \ n"、&)
	ChangeBaseValue(A)
	fmt.Printf( "主アドレス=%P \ n"、&)
	fmt.Println(A)

	ChangeBaseValuePtr(&)
	fmt.Printf( "主アドレス=%P \ n"、&)
	fmt.Println(A)
}

送信された基準構造を通過する/ *値* /
main022関数(){
	zhangsan:= {人年齢:10}
	fmt.Printf( "メイン:zhangsanアドレス=%P \ n"、&zhangsan)
	// ChangeObjectValue(zhangsan)
	ChangeObjectValuePtr(&zhangsan)
	fmt.Println(zhangsan.Age)
}

FUNCのmain(){
	VARアレイ= [3] INT {1,2,3}
	スライス:=メイク([] INT、0)
	スライス=アペンド(スライス、1、2、3)
	MMAP:=メイク(マップ[文字列] int型)
	MMAP [ "ボス"] = 1
	MMAP [ "第二"] = 2
	MMAP [ "最も若い"] = 3
	fmt.Printf( "メイン:配列[0]アドレス=%P \ n"、&配列[0])
	fmt.Printf( "メイン:スライス[0]アドレス=%P \ n"、&スライス[0])
	fmt.Printf( "メイン:マップアドレス=%P \ n" は、MMAP)
	// ChangeContainerValue(アレイ、スライス、MMAP)
	ChangeContainerValuePtr(&アレイ、およびスライス&MMAP)

	fmt.Println(アレイ)
	fmt.Println(スライス)
	fmt.Println(MMAP)
}

出力:

メイン:配列[0]アドレス= 0xc0000102e0
メイン:スライス[0]アドレス= 0xc000010300
メイン:マップアドレス= 0xc000062240
[100 2 3]
[200 2 3 4]
マップ[ボス:第二子300:2最年少:3の第四:4]

  

おすすめ

転載: www.cnblogs.com/yunweiqiang/p/12392331.html