V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
tqz
V2EX  ›  Go 编程语言

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

  •  
  •   tqz · 2020-04-16 22:28:45 +08:00 · 4214 次点击
    这是一个创建于 1682 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    这两种写法的区别是啥啊

    第 1 条附言  ·  2020-04-17 09:17:59 +08:00

    感谢各位大佬的指点,萌新看明白了!

    10 条回复    2020-04-24 21:25:45 +08:00
    Fitz
        1
    Fitz  
       2020-04-16 22:35:12 +08:00
    数组元素指针和数组本身指针
    justin2018
        2
    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
        3
    tqz  
    OP
       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
        4
    mcfog  
       2020-04-16 23:40:11 +08:00
    我感觉这是大概率没搞明白 golang 语境下的 slice array pointer 这几个东西才会写出这样的类型问出这样的问题来,建议先看任意教程的相关内容
    silvernoo
        5
    silvernoo  
       2020-04-16 23:41:35 +08:00
    slice 的指针没有意义
    CEBBCAT
        6
    CEBBCAT  
       2020-04-16 23:58:08 +08:00 via Android
    数组名是一个数据结构,包含长度,容量,和一个指向内容的指针。那么*[] int 是指向一个数组名的指针,而[]*int 是元素为 int 指针的数组。

    建议用小例子来检查一下,我也是初学(另外求上海 Go 可转正实习)
    Allianzcortex
        7
    Allianzcortex  
       2020-04-17 01:02:39 +08:00 via iPhone
    数组指针和指针数组,想起了期末考试的 C++ 题...
    xuanbg
        8
    xuanbg  
       2020-04-17 08:19:46 +08:00
    array *[ ]int 是数组指针,指向一个数组的指针,它是个指针。array[ ]*int 是指针数组,是存放若干指针的数组,它是个数组。
    jack1998
        9
    jack1998  
       2020-04-17 11:11:05 +08:00
    @xuanbg []int 是切片吧
    TransAM
        10
    TransAM  
       2020-04-24 21:25:45 +08:00 via Android
    @Allianzcortex golang 的设计比 c 合理多了,从右往左读都不用加括号
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2148 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 01:18 · PVG 09:18 · LAX 17:18 · JFK 20:18
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.