golang 学习笔记
函数的参数
//值传递 形参不能改变实参的值 形参和实参是不同的地址单元
1,数组作为函数参数 返回值
func BubbleSort(arr [10]int) [10]int {
for i := 0; i < len(arr)-1; i++ {
for j := 0; j < len(arr)-1-i; j++ {
if arr[j] > arr[j+1] {
arr[j], arr[j+1] = arr[j+1], arr[j]
}
}
}
return arr
}
2,切片名作为函数参数 返回值
func test(s []int) []int{
//如果是函数中使用append进行数据添加时 形参的地址改变就不会在指向实参的地址
s = append(s, 11, 12, 13, 14, 15)
return s
}
3,将map作为函数参数
func demo(m map[int]string) {
m[4] = "刘胡兰"
m[5] = "赖宁"
fmt.Println(m)
//fmt.Printf("%p\n",m)
delete(m, 5)
fmt.Println(m)
}
4,结构体变量作为函数参数
func test2(stu Student) {
stu.name = "野猪佩奇"
fmt.Println(stu)
}
5,指针作为函数参数
func swap(a *int, b *int) {
//&变量 取地址操作 引用运算符
//*指针变量 取值操作 解引用运算符
//temp := *a
//fmt.Printf("temp类型:%T\n", temp)
//*a = *b
//*b = temp
*a, *b = *b, *a
}
各类型参数总结
1,数组:值传递,形参和实参是不同的存储单元;内存中有两份独立的数组存储不同的数据;在函数调用结束形参单元销毁 不会影响主调函数中实参的值;如果想通过函数计算结果并传递给实参 需要使用数组作为函数的返回值
2,切片:值传递;切片是引用传递。指针作为参数进行传递时,为引用传递,也就是传递的地址。
3,map:地址传递 引用传递 形参和实参指向内存中相同的地址段 修改形参会影响实参的值
4,结构体:值传递
5,指针:地址传递 形参可以改变实参的值