网站的关于页面,太原seo自媒体,宁波建设网站公司,上海域名网站title1. go中的指针2. 函数中的指针3. 方法中的指针1. go中的指针
使用 *类型 声明指针… 使用*变量名获取指针的值… 使用 p 获取指针的内存地址… fmt.Println( 指针复习 )// 声明指针avar a *intb : 1// 获取到b的内存地址.. 指向ba bfmt.Println(a…
title1. go中的指针2. 函数中的指针3. 方法中的指针1. go中的指针
使用 *类型 声明指针… 使用*变量名获取指针的值… 使用 p 获取指针的内存地址… fmt.Println( 指针复习 )// 声明指针avar a *intb : 1// 获取到b的内存地址.. 指向ba bfmt.Println(a, b, 获取到指针变量的值 , *a)2. 函数中的指针
go 函数中的指针默认是值传递即传递类型参数是对当前类型的拷贝。而不是传递引用。如果传递参数指针则改变原来参数的值。
package mainimport fmttype Vertex struct {X, Y float64
}func show1(v Vertex) {v.X 9v.Y 9
}func show(v *Vertex) {v.X 9v.Y 9
}func main() {v : Vertex{1, 2}show1(v)fmt.Println(v)show(v)fmt.Println(v)
}
可以看到结果… 传递指针的改变了原来的值…
$ go run .
{1 2}
{9 9}而对于go中函数参数是什么类型传递就是什么类型
func show(v *Vertex) {v.X 9v.Y 9
}// 错误
v : Vertex{1, 2}
show(v)// 正确
v : Vertex{1, 2}
show(v)3. 方法中的指针
go中的方法有个方法接收者。这也是和函数的区别。某个结构体或者类型可以给它们设置方法。
// 结构体的方法, (v *Vertex)为方法接收者
func (v *Vertex) changeOrg() {v.X, v.Y 3.0, 3.0fmt.Println(in changeOrg , *v)
}// (v Vertex)为方法接收者
func (v Vertex) nothingChange() {v.X, v.Y 3.0, 3.0fmt.Println(copy one , v)
}
方法的指针可以重定向.这里说会比较晦涩。即接收者是指针可以用值类型调用。接收者是值类型也可以用指针调用。 v : Vertex{99, 99}// 接收者是指针, 方法能用值类型调用// 由于 changeOrg 方法有一个指针接收者为方便起见Go 会将语句 v.changeOrg() 解释为 (v).changeOrg()。v.changeOrg()// (v).changeOrg()或者 v : Vertex{1, 1}// 值调用v.nothingChange()fmt.Println(v)p : v// 方法支持指针调用p.nothingChange()// (*p).m1()fmt.Println(v)