去值传递和地址传递的案例

  

这篇文章主要介绍了去值传递和地址传递的案例,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。

  ,,,,,,,,,,,,,,   ,,,,,,,,,,,,,,

先来看个简单的例子

1,变量前面加个,表示这个变量的地址(也就是这个变量的指针),指针变量前面加*表示这个指针对应的值(自己理解下)

//主要。gopackage主要   func之(){   s:=100   p:=, s//s的地址给了p      fmt.Println (* p)//100所以p对应的值变成了100   * p +=100   fmt.Println (* p)//200   fmt.Println (s)//200 p和s相同的地址,所以年代也变成200}//演示。gopackage主要   函数main () {   之()}

去默认使用按值传递来传递参数,也就是传递参数的副本。函数接收参数副本之后,在使用变量的过程中可能对副本的值进行更改,但不会影响到原来的变量,比如函数(__arg1)。

2,普通值传递(注意这个例子,看起来很简单,但是容易忽略)

func ByValue1 (n1 int) {//此时n1是n的一个拷贝,所以地址不一样   fmt.Println(和n1)//0 xc00000a098}包主要   函数main () {   护士:=100   fmt.Println xc00000a090(和n)//0   ByValue1 (n)//传递副本}

如果你希望函数可以直接修改参数的值,而不是对参数的副本进行操作,你需要将参数的地址(变量名前面添加,符号,比如,变量)传递给函数,这就是按引用传递,比如函数(和__arg1),此时传递给函数的是一个指针。

3,如果想用地址传递

函数主要(){   护士:=100   fmt.Println xc00000a090(和n)//0   ByReference(和n)//传递指针   fmt.Println (n)//200}//注意函数参数类型需要是用指针符号(*)func ByReference (n1 * int) {      * n1 +=100   fmt.Println (n1)//0 xc00000a090地址与n相同,所以n值被改变了//注意//ip:=, n1//这个写法有问题,表示地址的地址//fmt.Println (ip)}

4,看下数组

    <李> (a)数组也是值传递加勒比海盗:=[5]int {1、3、5、6、7} arrByValue (, arr)//也需要使用,符号fmt.Println (arr)//[100 300 5 6 7] func arrByValue (arr1 * [5] int) {   arr2:=arr1   arr2 [0]=100   arr2 [1]=300}

5、下面是切片的例子(可变的数组)切片是引用传递

函数主要(){   加勒比海盗:=int [] {1、3、5、6、7}   bbb (arr)//没有使用,符号   fmt.Print (arr[0])//11结果已经改变,说明数组是地址传递//就算不通过函数,也是引用传递//加勒比海盗:=int [] {1、3、5、6、7}//arr2:=加勒比海盗//arr2 [1]=0//fmt.Print (arr)//[1 0 5 6 7]}//aaafunc bbb (arr1 int []) {   arr1 [0] +=10}
    <李> (b)在函数调用时,像切片(片),字典(地图),接口(接口),通道(频道)这样的引用类型都是默认使用引用传递(即使没有显式的指出指针)。

感谢你能够认真阅读完这篇文章,希望小编分享转值传递和地址传递的案例内容对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,遇到问题就找,详细的解决方法等着你来学习!

去值传递和地址传递的案例