Golang Go语言中指针相关:array *[]int 和 array[]*int 的区别是啥

发布于 1周前 作者 itying888 来自 Go语言

Golang Go语言中指针相关:array *[]int 和 array[]*int 的区别是啥

我定义数组指针的时候用的是:var array [3]*int

我在函数里面传递一个数组的地址的时候要用一个数组指针来接收它的地址,我写的是:array *[]int

这两种写法的区别是啥啊

11 回复

数组元素指针和数组本身指针

更多关于Golang Go语言中指针相关:array *[]int 和 array[]*int 的区别是啥的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


数组指针是指向数组地址的指针

指针数组是数组里面全都是指针类型

https://learnku.com/docs/qianxi-golang/section-4-pointer-array-pointer-and-pointer-array/6347

我当初是看这个理解的

我的 demo

go<br>package main<br><br>import "fmt"<br><br>func main() {<br><br> array := []int{1, 2, 3, 4, 5}<br> fmt.Println("array[0]=", array[0])<br> changeArray(&amp;array)<br> fmt.Println("array[0]=", array[0])<br><br>}<br><br>// 函数的指针参数<br>func changeArray(array *[]int) {<br> (*array)[0] = 123456789<br>}<br><br>// 数组指针:指的是一个指针,只不过这个指针指向了一个数组<br>// 指针数组:指的是一个数组,这个数组里面装满了指针。<br>func arrayPtr() {<br><br> a := []int{1, 2, 3}<br> len := len(a)<br><br> var ptr [3]*int<br><br> for i := 0; i &lt; len; i++ {<br> ptr[i] = &amp;a[i]<br> }<br><br> for i := 0; i &lt; len; i++ {<br> fmt.Printf("%p\n", ptr[i])<br> }<br>}<br>

我感觉这是大概率没搞明白 golang 语境下的 slice array pointer 这几个东西才会写出这样的类型问出这样的问题来,建议先看任意教程的相关内容

slice 的指针没有意义

数组名是一个数据结构,包含长度,容量,和一个指向内容的指针。那么*[] int 是指向一个数组名的指针,而[]*int 是元素为 int 指针的数组。

建议用小例子来检查一下,我也是初学(另外求上海 Go 可转正实习)

数组指针和指针数组,想起了期末考试的 C++ 题…

array *[ ]int 是数组指针,指向一个数组的指针,它是个指针。array[ ]*int 是指针数组,是存放若干指针的数组,它是个数组。

[]int 是切片吧

golang 的设计比 c 合理多了,从右往左读都不用加括号

在Go语言中,理解指针和数组的组合是非常重要的,尤其是当你看到类似 *[]int[]*int 这样的类型时。它们表示的是完全不同的数据结构,具有不同的使用场景。

  1. *[]int

    • 这是一个指向整数切片(slice)的指针。
    • 这里的 []int 表示一个整数切片,而前面的 * 表示这是一个指向该切片的指针。
    • 使用这种类型时,你实际上是在操作一个切片的引用,这意味着对这个切片所做的任何修改(如添加、删除元素)都会影响到通过这个指针访问到的原始切片。
  2. []*int

    • 这是一个整数指针的切片。
    • 这里的 *int 表示一个指向整数的指针,而 [] 表示这是一个包含多个这样指针的切片。
    • 使用这种类型时,你有一个切片,其中每个元素都是一个指向整数的指针。这允许你存储对多个整数的引用,而不仅仅是它们的值。这对于需要动态分配内存或处理大量数据时非常有用。

总结来说,*[]int 是一个指向整数切片的指针,而 []*int 是一个包含整数指针的切片。选择使用哪一种取决于你的具体需求:是否需要操作一个切片的引用,还是需要一个可以存储多个整数引用的切片。

回到顶部