gpt4 book ai didi

pointers - 初始化嵌入式结构时的指针差异

转载 作者:IT王子 更新时间:2023-10-29 01:39:53 26 4
gpt4 key购买 nike

我正在研究结构嵌入,但在保持对嵌入结构的相同引用方面遇到了问题。

试用 Go Playground并看到有两个指向 *strings.Reader 的不同指针地址。

package main

import (
"fmt"
"strings"
)

type Base struct {
reader *strings.Reader
}

func NewBase() *Base {
r := strings.NewReader("hello")

fmt.Printf("document: %#+v\n\n", &r)
return &Base{r}
}

func (b *Base) Check() {
fmt.Printf("document: %#+v\n\n", &b.reader)

}

type Concrete struct {
*Base
}

func NewConcrete() *Concrete {
return &Concrete{NewBase()}
}

func main() {
c := NewConcrete()
c.Check()
}

为什么这些地址不一样?我该如何解决这个问题?

最佳答案

您正在检查指针的地址,而不是指针本身。

func NewBase() *Base {
r := strings.NewReader("hello")

fmt.Printf("document: %#p\n\n", r)
return &Base{r}
}

func (b *Base) Check() {
fmt.Printf("document: %#p\n\n", b.reader)

}

playground

//编辑

r := strings.NewReader("hello")

r 是指向strings.Reader 的指针的变量,&r 是指向 的指针的变量的地址strings.Reader.

fmt.Printf("document: %#+v\n\n", &b.reader)

&b.reader 是变量b.reader 的地址,它保存着之前strings.Reader 的指针。

关于pointers - 初始化嵌入式结构时的指针差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25231592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com