网站建设费用分录,每天做特卖的网站是哪个,旅行网站模板,哪个网站上可以做初中数学题go语言指针 为什么需要指针指针使用实例值传递地址传递多级指针 为什么需要指针 作为一个大学划水#xff0c;毕业一直写java的程序员来说#xff0c;多多少少对于指针有点陌生#xff0c;由于近期需要转go#xff0c;正好学到指针这里#xff0c;就来探究下指针的使用场景… go语言指针 为什么需要指针指针使用实例值传递地址传递多级指针 为什么需要指针 作为一个大学划水毕业一直写java的程序员来说多多少少对于指针有点陌生由于近期需要转go正好学到指针这里就来探究下指针的使用场景和用法吧。 首先我们来看下以下这个简单的例子主方法通过形参将a传递进方法changeValue然后这个方法将值改变了那么主方法得到的值是否会改变呢
import fmt/**
指针专题
*/func changeValue(p int) {p 10
}func main() {var a 1changeValue(a)fmt.Println(a , a)
}运行后我们发现打印的a的值为1a并没有因为changeValue这个方法而改变。 究其原因是因为我们调用方法的时候是通过值传递的而非地址传递它的模型如下 因为两个值存在于不同的地址中所以值没有改变为了使上述方法能让值得到修改我们需要通过指针传入地址来让修改的变量值在当前地址中进行修改。
package mainimport fmt/**
指针专题
*/func changeValue(p *int) {*p 10
}func main() {var a 1changeValue(a)fmt.Println(a , a)
}
因此使用指针过后修改的为地址的值
指针使用实例
值传递
func swap(a int, b int) {var temp inttemp aa bb temp
}func main() {var a 10var b 20swap(a, b)fmt.Println(a, a, b, b)
}最终a10 b20值并没有改变 地址传递
func swap(pa *int, pb *int) {var temp inttemp *pa*pa *pb*pb temp
}func main() {var a 10var b 20swap(a, b)fmt.Println(a, a, b, b)
}最终a20 b10通过地址传递改变了原来的值 多级指针
指向指针的指针称为多级指针
func main() {a : 0//一级指针var p *intp afmt.Println(a)fmt.Println(p)//二级指针var pp **intpp pfmt.Println(p)fmt.Println(pp)
}打印结果如下
0x1400000e078
0x1400000e078
0x14000046020
0x14000046020