指针
1、简单的定义一个指针
packagemain import"fmt" funcmain(){ varp*int i:=2 p=&i fmt.Println("memoryaddressi:",p) } //执行结果: memoryaddressi:0xc42000a2e0
2、打印指针的值
packagemain import"fmt" funcmain(){ varp*int i:=2 p=&i fmt.Println("memoryaddressi:",p) fmt.Println(*p) } //执行结果: memoryaddressi:0xc42000a2e0 2
3、指针赋值
packagemain import"fmt" funcmain(){ varp*int i:=2 p=&i fmt.Println("memoryaddressi:",p) fmt.Println(*p) *p=3 fmt.Println(*p) fmt.Println(i) } //执行结果: memoryaddressi:0xc42000a2e0 2 3 3//我们发现*p和i的值都变了,因为指针地址是一个。
4、指针值拷贝与指针值更改
packagemain import"fmt" funcchangValue(xint){ x=20 } funcchangValueNow(x*int){ *x=20 } funcmain(){ varp*int i:=2 p=&i fmt.Println("memoryaddressi:",p) fmt.Println("memoryaddressp:",&i) fmt.Println(*p) *p=3 fmt.Println(*p) fmt.Println(i) changValue(i) fmt.Println("i=",i) changValueNow(&i) fmt.Println("nowi:",i) } //执行结果: memoryaddressi:0xc42000a2e0 memoryaddressp:0xc42000a2e0 2 3 3 i=3//传过去3,改为20,打印i还是3说明这种只是值拷贝并没更改本身 nowi:20//传过去一个指针地址,将地址值改为20,打印i是20,传递指针内存地址修改将改变指针的值。
5、指针申明
packagemain import"fmt" funcchangValue(xint){ x=20 } funcchangValueNow(x*int){ *x=20 } funcmain(){ varp*int i:=2 p=&i fmt.Println("memoryaddressi:",i) pj:=new(int)//使用new创建一个int型的指针 changValueNow(pj) fmt.Println("pj=",*pj) } //执行结果: memoryaddressi:0xc42000a2e0 memoryaddressp:0xc42000a2e0 2 3 3 i=3 nowi:20 pj=20
6、golang中没有指针的运算操作。