go指针

本文详细讲解了指针的概念、地址运算、nil指针、指针指针、数组与指针操作,以及交换变量值的示例,涵盖了指针在Golang中的核心知识点。通过实例演示,读者可以掌握如何正确使用和理解指针在程序设计中的关键作用。
摘要由CSDN通过智能技术生成

声明

//  &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 !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值