在学习go语言的时候,谈到了指针。之前很害怕指针,因为在传说中,指针这玩意儿据说狠不好弄,且有很多程序员都死在这上面。可是,这毕竟是go语言借鉴C语言为了提升速度的,所以硬着头皮把c语言的指针学习了一下,主要是概念的东西,顺便看了几行C语言的代码,为了不至于使自己的学习成果随着时间忘掉,故作此记录,以为之后学习的记录。
我对指针的理解:
记得他们说房子的事,那我就用房子做理解了。假如有A,B,C,D四个房子,且里面分别住着1,2,3,4四个人。那么a,b,c,d则分别为这四个房子的钥匙。于是乎正如C语言里面的表示
a = &1(俺是这么理解的,&1是为了说明住1的那个房间其实就是A)
b = &2
c = &3
d = &4
而
1 = *a(俺是这么理解的,a钥匙能开的那个房子住的人)
2 = *b
3 = *c
4 = *d
这样的话在进行数据交换的时候,使用指针是很效率的,只不过初学的时候有点难于理解,俺的理解是这样的
四个房间的钥匙还是a,b,c,d但是房子里面的人进行了呼唤,比如:A-->2 B-->1,C-->4,D-->3
这样a = &2,因为房子还在那,开A房间的钥匙还是a,但是人变成了2,所以a = &2了。
想到速度了:其实这也是为什么指针的速度要快一些,俺理解的是有一面是因为指针只是换了房子里面的人,而房子不用动,但是如果不用指针,则相当要再
盖四个房子,里面放上几个复制品(假设人可以复制),这样盖房子肯定要消耗时间呢(其他提升速度的原因俺没想到,俺也不往那么深想了)。
下面为贴代码已作说明:
func interchange(u *int, v *int){
var tmp int
tmp = *v
*v = *u
*u = tmp
}
func main(){
var x int = 5
var y int = 10
fmt.Println(x,y)
interchange(&x,&y)
fmt.Println(x,y)
}
解释:
1、interchange函数:u和v分别为两把钥匙且房子为U和V里面住着1和2 *v = 2 ,*u = 1
2、U住进了2,V住进了1
3、main函数调用的时候&x 其实就是u,&y其实就是v,对应这U房和V房
4、经过交换,5到了V房,10到了U房
5、fmt.Println(x,y)其实这时候只有U的房子住的是10,V的房子里面住的是5,因为是这样理解的,*u,*v