声明
// &name:指针地址 name:指针所指向对象的地址
var name *type
打印地址
num :=10
fmt.Printf("num.address=%x",&num)
输出
num.address=c00000a0a0
例子
num1 :=18;
num1pointer := &num1;
fmt.Printf("num1.address=%x \n",&num1)
fmt.Printf("num1pointer.address=%x \n",num1pointer)
fmt.Printf("*num1pointer.val=%d \n",*num1pointer)
输出
num1.address=c0000a2090
num1pointer.address=c0000a2090
*num1pointer.val=18
nil 指针
var ptr *int
// 打印0 程序不允许访问地址为0的内存
fmt.Printf("ptr.address=%x \n",ptr)
// 会报错
*ptr = 10
var p *int = nil
// 会报错
*p = 10
panic: runtime error: invalid memory address or nil pointer dereference
指针例子
var aa *int;
// 0
aap := &aa;
fmt.Printf("aa指针自己地址=%x \n",&aa);
fmt.Printf("aa指针所指向的内存地址=%x \n",aa);
fmt.Printf("aap.address=aa指针地址=%x \n",aap);
// aap指针指向aa的内存地址
fmt.Printf("aa指针所指向的内存地址=%x \n",*aap);
fmt.Printf("&aap=aap的内存地址 %x \n",&aap)
指针的指针
a :=10
ap := &a;
app := ≈
//10
fmt.Printf("a: %d \n",a)
// a的地址
fmt.Printf("a: %x \n",&a)
// c0000a2058 a的地址
fmt.Printf("ap: %x \n",ap)
// 10 ap所指向的对象 10
fmt.Printf("*ap: %d \n",*ap)
// c0000cc018 ap指针的地址
fmt.Printf("app: %x \n",app)
// c0000a2058 ap指针所指向对象=a的地址
fmt.Printf("*app: %x \n",*app)
// 10
fmt.Printf("**app: %d \n",**app)
指针数组
a := []int {100,200,300}
var ptr [3]*int
for i :=0;i<3;i++ {
ptr[i] = &a[i]
fmt.Printf("a[%d]的地址:%x\n",i,ptr[i])
}
for i :=0;i<3;i++ {
fmt.Printf("a[%d]的值:%d\n",i,*ptr[i])
}
a[0]的地址:c0000a0140
a[1]的地址:c0000a0148
a[2]的地址:c0000a0150
a[0]的值:100
a[1]的值:200
a[2]的值:300
swap
a:=100
b:=200
fmt.Printf("交换之前a的值为:%d\n",a)
fmt.Printf("交换之前b的值为:%d\n",b)
swap(&a,&b)
fmt.Printf("交换之后a的值为:%d\n",a)
fmt.Printf("交换之后b的值为:%d\n",b)
func swap(x *int, y *int) {
var temp int
temp = *x;
*x = *y;
*y = temp;
}
交换之前a的值为:100
交换之前b的值为:200
交换之后a的值为:200
交换之后b的值为:100
demo
var a int = 100
var str string = "welcome to golang!"
fmt.Printf("a.address=%p,str.address=%p \n",&a,&str)
var str1 = "welcome to you !"
ptr := &str1
fmt.Printf("ptr.address=%p ptr.value=%s \n",ptr,*ptr)
var ptr1 *string
ptr1 = &str1
fmt.Printf("ptr1.address=%p ptr1.value=%s \n",ptr1,*ptr1)
输出
a.address=0xc00000a0a0,str.address=0xc00004e1f0
ptr.address=0xc00004e200 ptr.value=welcome to you !
ptr1.address=0xc00004e200 ptr1.value=welcome to you !