V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
tqz

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

  •  
  •   tqz · Apr 16, 2020 · 4985 views
    This topic created in 2206 days ago, the information mentioned may be changed or developed.

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

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

    这两种写法的区别是啥啊

    Supplement 1  ·  Apr 17, 2020

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

    10 replies    2020-04-24 21:25:45 +08:00
    Fitz
        1
    Fitz  
       Apr 16, 2020
    数组元素指针和数组本身指针
    justin2018
        2
    justin2018  
       Apr 16, 2020
    数组指针是指向数组地址的指针

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

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

    我当初是看这个理解的
    tqz
        3
    tqz  
    OP
       Apr 16, 2020
    ## 我的 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  
       Apr 16, 2020
    我感觉这是大概率没搞明白 golang 语境下的 slice array pointer 这几个东西才会写出这样的类型问出这样的问题来,建议先看任意教程的相关内容
    silvernoo
        5
    silvernoo  
       Apr 16, 2020
    slice 的指针没有意义
    CEBBCAT
        6
    CEBBCAT  
       Apr 16, 2020 via Android
    数组名是一个数据结构,包含长度,容量,和一个指向内容的指针。那么*[] int 是指向一个数组名的指针,而[]*int 是元素为 int 指针的数组。

    建议用小例子来检查一下,我也是初学(另外求上海 Go 可转正实习)
    Allianzcortex
        7
    Allianzcortex  
       Apr 17, 2020 via iPhone
    数组指针和指针数组,想起了期末考试的 C++ 题...
    xuanbg
        8
    xuanbg  
       Apr 17, 2020
    array *[ ]int 是数组指针,指向一个数组的指针,它是个指针。array[ ]*int 是指针数组,是存放若干指针的数组,它是个数组。
    systemv
        9
    systemv  
    PRO
       Apr 17, 2020
    @xuanbg []int 是切片吧
    TransAM
        10
    TransAM  
       Apr 24, 2020 via Android
    @Allianzcortex golang 的设计比 c 合理多了,从右往左读都不用加括号
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   782 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 21:23 · PVG 05:23 · LAX 14:23 · JFK 17:23
    ♥ Do have faith in what you're doing.