当前位置: 首页 > news >正文

深圳商城网站建设报价互联网广告

深圳商城网站建设报价,互联网广告,网站维护与排名,做信息类网站怎么赚钱✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…

✍个人博客:Pandaconda-CSDN博客
📣专栏地址:http://t.csdnimg.cn/UWz06
📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

下面分别针对 Go 的变量类型,验证是否是值传递,以及函数内对形参的修改是否会修改原内容数据:

22. int 类型

形参和实参内存地址不一样,证明是指传递;参数是值类型,所以函数内对形参的修改,不会修改原内容数据。

package mainimport "fmt"func main() {var i int64 = 1fmt.Printf("原始int内存地址是 %p", &i)modifyInt(i) // args就是实际参数fmt.Printf("改动后的值是: %v", i)
}func modifyInt(i int64) { //这里定义的args就是形式参数fmt.Printf("函数里接收到int的内存地址是:%p", &i)i = 10
}
原始int内存地址是 0xc0000180b8
函数里接收到int的内存地址是:0xc0000180c0
改动后的值是: 1

23. 指针类型

形参和实际参数内存地址不一样,证明是值传递,由于形参和实参是指针,指向同一个变量。函数内对指针指向变量的修改,会修改原内容数据。

package mainimport "fmt"func main() {var args int64 = 1                  // int类型变量p := &args                          // 指针类型变量fmt.Printf("原始指针的内存地址是 %p", &p)   // 存放指针类型变量fmt.Printf("原始指针指向变量的内存地址 %p", p) // 存放int变量modifyPointer(p)                    // args就是实际参数fmt.Printf("改动后的值是: %v", *p)
}func modifyPointer(p *int64) { //这里定义的args就是形式参数fmt.Printf("函数里接收到指针的内存地址是 %p ", &p)fmt.Printf("函数里接收到指针指向变量的内存地址 %p", p)*p = 10
}
原始指针的内存地址是 0xc000110018
原始指针指向变量的内存地址 0xc00010c008
函数里接收到指针的内存地址是 0xc000110028 
函数里接收到指针指向变量的内存地址 0xc00010c008
改动后的值是: 10

24. slice 类型

形参和实际参数内存地址一样,不代表是引用类型;下面进行详细说明 slice 还是值传递,传递的是指针。

package mainimport "fmt"func main() {var s = []int64{1, 2, 3}// &操作符打印出的地址是无效的,是fmt函数作了特殊处理fmt.Printf("直接对原始切片取地址%v ", &s)// 打印slice的内存地址是可以直接通过%p打印的,不用使用&取地址符转换fmt.Printf("原始切片的内存地址: %p ", s)fmt.Printf("原始切片第一个元素的内存地址: %p ", &s[0])modifySlice(s)fmt.Printf("改动后的值是: %v", s)
}func modifySlice(s []int64) {// &操作符打印出的地址是无效的,是fmt函数作了特殊处理fmt.Printf("直接对函数里接收到切片取地址%v", &s)// 打印slice的内存地址是可以直接通过%p打印的,不用使用&取地址符转换fmt.Printf("函数里接收到切片的内存地址是 %p ", s)fmt.Printf("函数里接收到切片第一个元素的内存地址: %p ", &s[0])s[0] = 10
}
直接对原始切片取地址&[1 2 3] 
原始切片的内存地址: 0xc0000b8000 
原始切片第一个元素的内存地址: 0xc0000b8000 
直接对函数里接收到切片取地址&[1 2 3]
函数里接收到切片的内存地址是 0xc0000b8000 
函数里接收到切片第一个元素的内存地址: 0xc0000b8000 
改动后的值是: [10 2 3]

slice 是一个结构体,他的第一个元素是一个指针类型,这个指针指向的是底层数组的第一个元素。当参数是 slice 类型的时候,fmt.printf 通过 %p 打印的 slice 变量的地址其实就是内部存储数组元素的地址,所以打印出来形参和实参内存地址一样。

type slice struct {array unsafe.Pointer // 指针len   intcap   int
}

因为 slice 作为参数时本质是传递的指针,上面证明了指针也是值传递,所以参数为 slice 也是值传递,指针指向的是同一个变量,函数内对形参的修改,会修改原内容数据。

单纯的从 slice 这个结构体看,我们可以通过 modify 修改存储元素的内容,但是永远修改不了 len 和 cap,因为他们只是一个拷贝,如果要修改,那就要传递 &slice 作为参数才可以。

http://www.tj-hxxt.cn/news/20745.html

相关文章:

  • 丹阳市制作网站关于进一步优化落实疫情防控措施
  • 网站服务器速度市场营销的对象有哪些
  • 贵州建设厅监理协会网站什么是淘宝seo
  • 甘肃做网站的网络公司专业做网站公司
  • 网站开发寻找潜在客户的途径百度信息流推广和搜索推广
  • 动效网站怎么做外包网
  • 有网站可以接设计的单子做吗站长工具亚洲高清
  • 网站开发方式演进seo机构
  • 做暖暖视频网站有哪些自助发稿
  • 自己建设网站企业推广是什么意思
  • 做网站竞价没有点击率各大网站推广平台
  • wordpress页面提醒404南昌seo专业团队
  • 泉州自助建站软件网站制作app免费软件
  • facebook怎么推广网站仓山区seo引擎优化软件
  • 什么网站可以做设计赚钱的吗windows7优化大师官方下载
  • 网站维护技术百度框架户开户渠道代理
  • 黔西南州建设局网站推广app赚钱的平台
  • 公司网站无法打开百度退款客服电话
  • 网站编辑怎么做详细的营销推广方案
  • 网站建设淘宝评价线上推广渠道有哪些
  • 韩国网页设计公司网站谷歌排名
  • 做设计赚钱网站软件工程培训机构哪家好
  • 网站建设营销词app营销策略有哪些
  • 哪家招聘网站的猎头做的比较好网址生成短链接
  • 国外上国内网站很慢国外网站推广平台有哪些?
  • 深圳做网站做得比较好的公司运营推广的方式和渠道
  • 个人网站 目的百度平台电话
  • 网站现在一般做多大尺寸百度快照手机入口
  • 服务性企业网站关于营销的最新的新闻
  • 天津网站优化多少钱网站运营策划书