pointers - 为什么 golang 中的字符串指针在范围循环中的行为违反直觉?

标签 pointers go

使用此代码:https://play.golang.org/p/tCm1W-K-6ob

此代码将打印:[c c c],但 [a b c] 除外。

type A struct {
    a *string
}

func f() {
    slist := []string{"a", "b", "c"}
    list := make([]*A, len(slist))
    for i, v := range slist {
        item := &A{
            a: &v,
        }
        list[i] = item
    }
    fmt.Printf("[%s %s %s]", *list[0].a, *list[1].a, *list[2].a)
}

func main() {
    f()
}

为什么列表不是 ["a", "b", "c"]?范围或 &string 发生了什么?

最佳答案

https://play.golang.org/p/utJrUmxeqfh

package main

import (
    "fmt"
)

func main() {
    foo := []int{1, 2, 3}
    for _, f := range foo {
        fmt.Printf("value is %d, addr is %p \n", f, &f)
    }
    fmt.Println("Hello, playground")
}
value is 1, addr is 0x414020 
value is 2, addr is 0x414020 
value is 3, addr is 0x414020 
Hello, playground

range 中的值f 具有相同的地址

关于pointers - 为什么 golang 中的字符串指针在范围循环中的行为违反直觉?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56944781/

相关文章:

types - 调用 Go 函数,它接受接口(interface) A 的 slice 和结构 B 的 slice (B 实现 A)

pointers - 结构成员的 Golang func 指针

pointers - 从 Go 中的字符串访问内存地址?

c - 将struct的成员声明为c中的指针并使用它

c# - 如何编码指向包含无符号字符数组的结构数组的指针?

c - C 中获取函数返回参数的地址

bash - sed: 1: "'/正则表达式/.. .": invalid command code '

C++:运算符重载<用于指向对象的指针

C++指针查询

http - Golang Wasm HTTP请求失败