Go 语言里面的指针: array *[ ]int 和 array[ ]*int 的区别是啥

2020-04-16 22:28:45 +08:00
 tqz

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

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

这两种写法的区别是啥啊

4206 次点击
所在节点    Go 编程语言
10 条回复
Fitz
2020-04-16 22:35:12 +08:00
数组元素指针和数组本身指针
justin2018
2020-04-16 22:36:35 +08:00
数组指针是指向数组地址的指针

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

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

我当初是看这个理解的
tqz
2020-04-16 22:47:51 +08:00
## 我的 demo

```go
package main

import "fmt"

func main() {

array := []int{1, 2, 3, 4, 5}
fmt.Println("array[0]=", array[0])
changeArray(&array)
fmt.Println("array[0]=", array[0])

}

// 函数的指针参数
func changeArray(array *[]int) {
(*array)[0] = 123456789
}

// 数组指针:指的是一个指针,只不过这个指针指向了一个数组
// 指针数组:指的是一个数组,这个数组里面装满了指针。
func arrayPtr() {

a := []int{1, 2, 3}
len := len(a)

var ptr [3]*int

for i := 0; i < len; i++ {
ptr[i] = &a[i]
}

for i := 0; i < len; i++ {
fmt.Printf("%p\n", ptr[i])
}
}
```
mcfog
2020-04-16 23:40:11 +08:00
我感觉这是大概率没搞明白 golang 语境下的 slice array pointer 这几个东西才会写出这样的类型问出这样的问题来,建议先看任意教程的相关内容
silvernoo
2020-04-16 23:41:35 +08:00
slice 的指针没有意义
CEBBCAT
2020-04-16 23:58:08 +08:00
数组名是一个数据结构,包含长度,容量,和一个指向内容的指针。那么*[] int 是指向一个数组名的指针,而[]*int 是元素为 int 指针的数组。

建议用小例子来检查一下,我也是初学(另外求上海 Go 可转正实习)
Allianzcortex
2020-04-17 01:02:39 +08:00
数组指针和指针数组,想起了期末考试的 C++ 题...
xuanbg
2020-04-17 08:19:46 +08:00
array *[ ]int 是数组指针,指向一个数组的指针,它是个指针。array[ ]*int 是指针数组,是存放若干指针的数组,它是个数组。
jack1998
2020-04-17 11:11:05 +08:00
@xuanbg []int 是切片吧
TransAM
2020-04-24 21:25:45 +08:00
@Allianzcortex golang 的设计比 c 合理多了,从右往左读都不用加括号

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/663226

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX