Go 之基础速学 (五) golang 里函数以及函数之间参数的传递
package main
import "fmt"
//main函数是入口函数 不能有参数 也不能有返回值
func main(){
//函数的参数传递 案例一
//me := "huxiaobai"
//fmt.Println(me) //此处传递过去的是me的内存块里面的值 而不是内存的地址 所以在test函数里面对p进行修改不会影响me的值
//test(me)
//fmt.Println(me)
//函数的参数传递 案例二
//me := "wangxiaoer"
//fmt.Println(me) //此处传递过去的是me的内存地址 &me可以获取到内存块的内存地址
//test1(&me)
//fmt.Println(me)
//函数的参数传递 案例三
//总结:golang当中函数的参数传递都是按照值来进行传递的 虽然传递指针的时候你感觉是在传递指针其实传递的还是指针指向的内存区域块 那就还是值
//这个地方确实不大好理解 但是你把指针传递过去修改指针为nil回过头来打印指针的内存地址是没变的 这就说明传递指针其实就是传递的指针指向的内存区域块里面的值
//声明一个var_type为string类型的指针 var u *string; u = new(string)是一样的效果
u:=new(string)
//*u 表示为指针指向的内存区域赋值
*u = "wocao"
fmt.Println(*u)
//调用test(u) 传递过去的是指针指向的内存区域
test2(u)
fmt.Println(*u)
}
//配合函数的参数传递 案例一
func test(p string){
//调用test传递的参数是内存块的值 而不是内存地址 在这里p = "abc" 那么重新开辟了内存区域 和上边的me没有任何的牵扯
p = "abc"
fmt.Println(p)
}
//配合函数的参数传递 案例二
func test1(p *string){
//p *string 表示p是一个指针 指针指向内存地址哈 其实就是在声明 比如可以理解为 var p *string //*p = "wahaha" *号我们之前就讲过可以获取指针指向的内存地址的值 也可以设置指针指向的内存地址的值 这样通过指针的形式我们就改变了上边me的值
*p = "wahaha"
}
//配合函数的参数传递 案例三
func test2(p *string){
//调用方传递过来的是指针指向的内存区域
//这里*p为指针指向的内存区域赋值 从而导致上边的u的值发生变化
*p = "made"
}
直接上代码吧,因为注释里面写的很详细了!
很重要的一句话:
golang里面参数传递的实参为指针指向的内存地址块的这种形式很类似于php里面的引用传参,就是一个道理!
本作品采用《CC 协议》,转载必须注明作者和本文链接