gpt4 book ai didi

pointers - slice 指针的内存值是什么意思?

转载 作者:行者123 更新时间:2023-12-01 22:35:12 25 4
gpt4 key购买 nike

我试图理解使用中的指针,但是对于它们的工作原理我仍然有些困惑。

我已经在SO上看到了另一个问题:print the Address of slice in golangHow do I print the pointer value of a Go object? What does the pointer value mean?,但仍然无法确定这个概念。

package main

import (
"fmt"
)

func main() {
numbers := myNumbers{42}
println("Pointer to numbers", &numbers)
numbers.printSlice()
numbers.printPointer()
}

type myNumbers []int

func (m myNumbers) printSlice() {
fmt.Printf("printSlice - value of m: %p \n", m)
fmt.Printf("printSlice - value of &m: %p\n", &m)
}

func (m *myNumbers) printPointer() {
fmt.Printf("printPointer - value of m: %p\n", m)
fmt.Printf("printPointer - value of &m: %p\n", &m)
}


输出为:
Pointer to numbers 0xc42000a060
printSlice - value of m: 0xc420016100
printSlice - value of &m: 0xc42000a080
printPointer - value of m: 0xc42000a060
printPointer - value of &m: 0xc42000c030

根据 printSlice中的go文档,第一行将打印数组第一个元素的地址,第二行将打印slice头副本的地址

printPointer中,第一行将打印指针的值,第二行将打印指针的地址

main中, prinln输出与 printPointer的第一行相同的地址,这是否意味着在 printPointer中,我有一个指向原始指针的指针?

以上假设是否正确?

最佳答案

numbers中的main是一个 slice ,因此您可以将其视为具有三个值的结构,即对基础数组的ptr,长度和容量。当您打印&numbers时,您正在打印此结构的地址。
printPointer具有指针接收器,因此在printPointer中,m是指向main中定义的结构的指针。这就是为什么在打印m时获得与oj​​it_code中打印相同的值的原因。当您打印main时,您正在打印一个指向指针的指针的值。 &m是一个指向函数接收者的指针,该指针指向&m中的m
main获取printSlice的副本。因此,当您打印m时,您将打印该副本的地址。

关于pointers - slice 指针的内存值是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58792346/

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