1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > Go语言学习笔记07--数组指针 切片指针与结构体指针

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

时间:2023-01-22 13:12:13

相关推荐

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

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] 整个数组的内存地址

fmt.Println(p2); //0xc0000180c0 数组第一个元素的内存地址

fmt.Printf("%T",p1); //*[5]int 数组指针

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。