数组和切片作为函参传递的不同
来源:互联网 发布:旅游市场调查数据 编辑:程序博客网 时间:2024/06/06 10:02
- 先说结论(这里以int为例):
- []int会作为切片按地址进行传递
- [3]int会作为数组按值传递
Golang代码实例
package mainimport "fmt"func main(){ a:=[]int{1,2,3} modifySlice(a) fmt.Println("main()中 a:",a)}func modifySlice(a []int){ a[0]=100 fmt.Println("对切片进行modifySlice()之后 a:",a)}
- 输出结果
- 对切片进行modifySlice()之后 a: [100 2 3]
main()中 a: [100 2 3]
package mainimport "fmt"func main() { a := [3]int{1, 2, 3} modifyArr(a) fmt.Println("main()中 a:", a)}func modifyArr(a [3]int) { a[0] = 100 fmt.Println("对切片进行modifyArr()之后 a:", a)}
- 输出结果
- 对数组进行modifyArr()之后 a: [100 2 3]
main()中 a: [1 2 3]
解决了这个问题之后,又遇到一个奇怪的问题,花了一点时间找到了问题所在,现在贴出来供参考:
当函数要返回经过操作之后的slice时,返回的slice的地址发生了改变,不再是传入的地址,代码如下
package mainimport ( "fmt" "unsafe" )func main(){ a:=[]int{1,2,3} b:=modifySlice(a) fmt.Println(&a==&b) fmt.Println("作为参数的a的地址:",unsafe.Pointer(&a)) fmt.Println("modifySlice返回的a的地址:",unsafe.Pointer(&b))}func modifySlice(a []int) []int{ a[0]=100 return a}
- 输出结果
- false
作为参数的a的地址: 0x115520e0
modifySlice返回的a的地址: 0x115520f0
阅读全文
0 0
- 数组和切片作为函参传递的不同
- 二维数组的作为函数形参的地址传递
- 二维数组作为形参的参数传递问题
- 二维数组作为形参的参数传递问题
- 数组名在作为形参传递时的注意事项
- NumPy数组基本的索引和切片
- 数组作为函数参数的传递
- 数组作为函数的参数传递
- 数组作为参数传递的方式
- 数组作为函数参数的传递方法
- 二维数组作为参数传递的问题
- 传递二维数组作为参数的指针
- 数组作为函数的参数传递
- 类的成员函数指针作为参数传递给其他函数和普通函数指针的传递是不同的
- 类的成员函数指针作为参数传递给其他函数和普通函数指针的传递是不同的
- 数组指针,指针数组,二维数组作为参数传递给以指针的指针作为形参的函数
- 一维数组和二位数组作为函数参数进行传递的方式
- golang 数组和切片
- 做出一段数据的概率分布和概率密度?
- Glide图片加载库的使用
- C++中的virtual关键字---补充(1)《Effective C++》
- iOS CI 自动生成IPA
- iOS架构设计-URL缓存(上)
- 数组和切片作为函参传递的不同
- 四.SpringBoot集成实例系列-注解型多数据源mybatis
- java程序性能优化之设计优化--设计模式:单例模式(1)
- 安装单个Nginx
- Java是传值还是传引用
- 前后端交互项目总结
- ArcMap坐标转换及投影详解
- 在HTML中使用Javascript (第二章)
- HTML语义化