Go语言学习笔记07--数组指针、切片指针与结构体指针

本文详细介绍了Go语言中的数组指针、切片指针和结构体指针的概念及使用。通过示例说明了数组指针与指针数组的区别,以及在地址相同但类型不同的情况下如何正确访问元素。同时,文章讨论了切片指针的特性,包括切片名本身就是指针、二重指针的用法以及切片指针作为函数参数的影响。最后,解释了结构体指针的用途,包括如何通过结构体指针访问结构体成员,并指出结构体数组指针和结构体切片指针的推论。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.数组指针
    (1)数组指针与指针数组
        这俩概念原本在c语言中就是一个绕口令般的存在,尽管从类型角度来看两者并没什么相似的地方。
        但是在go语言中对这两个类型的设定做出了一些不同的规定。首先交代一下基本概念:
            数组指针:指的是一个指针,只不过这个指针指向了一个数组
                eg:
                    var arr [5]int = [5]int{1,2,3,4,5};
                    var p *[5]int = &arr;
                    fmt.Println(p);//0xc00006a030
                    //此时p称为是数组arr的指针
                    //此时如果通过p访问数组元素是 (*p)[2],结果是3
            指针数组:指的是一个数组,这个数组里面装满了指针。
                eg:
                    var arr1 [5]int = [5]int{1,2,3,4,5};
                    var arr2 [5]int = [5]int{6,7,8,9,0};
                    var p1 *[5]int = &arr1;
                    var p2 *[5]int = &arr2;
                    var pArr [2]*[5]int = [2]*[5]int{p1,p2};
                    fmt.Println(pArr);//[0xc00006a030, 0xc00006a060]
                    //此时pArr称为是指针数组
                    //此时如果通过pArr访问数组元素是 (*pArr[0])[2],结果是3
    (2)地址相同、类型不同问题
        在go语言中,内存地址相同并不意味着其表示的数据或者数据类型就完全相同。
        eg:
            var arr [5]int = [5]int{1,2,3,4,5};
            p1,p2 := &arr,&arr[0];
            fmt.Println(p1);        //&[1,2,3,4,5] 整个数组的内存地址<

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值