package main
import "fmt"
func main() {
var num int
num = 10
//因为形参是指针,所以要传地址
MyFunc(&num)
}
//形参作为指针
func MyFunc(param *int) {
//输出 :param所指向内存空间的地址
//输出:10
fmt.Println(param , (*param))
}
若在MyFunc中对param进行操作会修改num的原值吗?
func main() {
var num int
num = 10
fmt.Println("调用MyFunc之前我的值为:", num, &num)
//因为形参是指针,所以要传地址
MyFunc(&num)
fmt.Println("调用MyFunc之后我的值为:", num, &num)
}
//形参作为指针
func MyFunc(param *int) {
fmt.Println("我是MyFunc():", param, (*param))
//这里修改了param里的值
(*param) = 100
}
若将切片做为形参又该如何传入?
//切片传参
func foo(slice []int) []int {
for i, _ := range slice {
fmt.Println(&slice[i])
slice[i] += 1
}
fmt.Println(cap(slice))
return slice
}
func main() {
slice := []int{0, 1, 2, 3, 4}
fmt.Println("调用foo之前", slice, "我的首地址", &slice[0])
fmt.Println("调用foo之后", foo(slice), cap(slice))
}
数组做为函数的形参
func main() {
/*数组的申明方式*/
//var array [5]int
//array := [10]int
//array := [...]int{0,0,0,0,0}
array := [5]int{1, 2, 3}
array1 := array
//这里进行了改值
array1[0] = 10
/*两种for循环方式*/
for _, a := range array {
fmt.Printf("%d ", a)
}
fmt.Printf("\r\n")
for i := 0; i < len(array1); i++ {
fmt.Printf("%d ", array1[i])
}
fmt.Printf("\r\n")
//调用函数
PPoint(&array)
}
//PPpoint 形参为指针数组
//写法和C语言不太一样
func PPoint(p *[5]int) {
for _, a := range p {
fmt.Println(a)
}
}