为什么结构引用的内存地址会更改?

21日:

我有一个结构和在结构参考上工作的方法。每次我调用该方法时,指针地址都会改变。为什么会这样呢?

package main

import "k8s.io/contrib/compare/Godeps/_workspace/src/github.com/emicklei/go-restful/log"

type Whatever struct{
    Name string
}

func (whatever *Whatever) GetNameByReference() (string) {
log.Printf("Whatever.GetNameByReference() memory address: %v", &whatever)

    return whatever.Name
}

func evaluateMemoryAddressWhenNotWritingAnything()  {
    whatever := Whatever{}

    whatever.GetNameByReference()
    whatever.GetNameByReference()
    whatever.GetNameByReference()
}

func main() {
    evaluateMemoryAddressWhenNotWritingAnything()
}

输出:

log.go:30: Whatever.GetNameByReference() memory address: 0xc420034020
log.go:30: Whatever.GetNameByReference() memory address: 0xc420034030
log.go:30: Whatever.GetNameByReference() memory address: 0xc420034038
沃尔克:

永远不要思考,永远不要谈论引用。Go没有“引用”的概念,一切都是价值。有些东西是指针值。您的问题源于将其*X视为不是“对X的引用”:它是一个保存X(或nil)的内存地址的值

因此,func (whatever *Whatever)在变量中whatever是指向的指针Whatever的值whateverWhatever指针指向的内存地址您想打印该内存地址,即的值whatever

你做Printf("%v", &whatever)记住:whatever是一个变量(保存一个内存地址)。&whatever变量本身的地址也是如此&whatever是type **Whatever你找到的地址&whatever不是你感兴趣的值; 它只是用于存储原始地址的临时变量Whatever当然,此临时变量不会固定在内存中,并且可以自由更改。

你应该做Printf("%p", whatever)该动词%p用于指针值,并且whatever是一个指针,您对其值感兴趣,因此请打印此值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

切片分配后,为什么内存地址会更改

来自分类Dev

为什么不同结构实例的内存地址没有改变?

来自分类Dev

为什么打印字符指针会产生字符串而不是内存地址?

来自分类Dev

为什么gorm db.First()会因“无效的内存地址或取消引用nil指针”而出现紧急情况?

来自分类Dev

Golang错误“无效的内存地址或nil指针取消引用”,为什么会发生这种情况?

来自分类Dev

为什么右值/常量引用具有内存地址和大小?

来自分类Dev

为什么有些内存地址报告为常数,而另一些则更改?

来自分类Linux

为什么在Ubuntu的内存地址的变化,而不是在红帽

来自分类Linux

为什么内存地址以0x开头?

来自分类Dev

指向新对象后,为什么内存地址相同?

来自分类Dev

为什么数组的内存地址不总是增加?

来自分类Dev

为什么相同值的内存地址不同

来自分类Dev

为什么NULL不是有效的内存地址?

来自分类Dev

为什么指针中的内存地址很重要

来自分类Dev

为什么这个内存地址改变了

来自分类Dev

为什么我们不能使用 esp 寄存器直接引用内存地址?

来自分类Dev

错误:紧急:运行时错误:无效的内存地址或nil指针取消引用。在另一个结构中存在的结构中更改映射,

来自分类Dev

结构的内存地址不可见

来自分类Dev

PhantomPinned 成员会让我的结构有一个固定的内存地址吗?

来自分类Dev

追加到结构片时无效的内存地址或nil指针取消引用

来自分类Dev

grpc:使用oneof会导致无效的内存地址或nil指针取消引用

来自分类Dev

如何防止向量从内存地址更改

来自分类Dev

为什么指针中包含的内存地址和指针的地址相同?

来自分类Dev

为什么nstring obj的内存地址与iOS dev中复制的地址不同?

来自分类Dev

为什么 Rust 中打印的内存地址是 40 位和 48 位地址的混合?

来自分类Dev

即使内存地址不同,Pytorch变量也会更改numpy变量

来自分类Dev

引用同一变量时,Swift Array的内存地址更改

来自分类Dev

为什么即使返回指针指向看似有效的shellcode的内存地址,我的C代码也会引发分段错误?

来自分类Dev

什么是无效的内存地址或Golang中的nil指针取消引用,如何解决?

Related 相关文章

  1. 1

    切片分配后,为什么内存地址会更改

  2. 2

    为什么不同结构实例的内存地址没有改变?

  3. 3

    为什么打印字符指针会产生字符串而不是内存地址?

  4. 4

    为什么gorm db.First()会因“无效的内存地址或取消引用nil指针”而出现紧急情况?

  5. 5

    Golang错误“无效的内存地址或nil指针取消引用”,为什么会发生这种情况?

  6. 6

    为什么右值/常量引用具有内存地址和大小?

  7. 7

    为什么有些内存地址报告为常数,而另一些则更改?

  8. 8

    为什么在Ubuntu的内存地址的变化,而不是在红帽

  9. 9

    为什么内存地址以0x开头?

  10. 10

    指向新对象后,为什么内存地址相同?

  11. 11

    为什么数组的内存地址不总是增加?

  12. 12

    为什么相同值的内存地址不同

  13. 13

    为什么NULL不是有效的内存地址?

  14. 14

    为什么指针中的内存地址很重要

  15. 15

    为什么这个内存地址改变了

  16. 16

    为什么我们不能使用 esp 寄存器直接引用内存地址?

  17. 17

    错误:紧急:运行时错误:无效的内存地址或nil指针取消引用。在另一个结构中存在的结构中更改映射,

  18. 18

    结构的内存地址不可见

  19. 19

    PhantomPinned 成员会让我的结构有一个固定的内存地址吗?

  20. 20

    追加到结构片时无效的内存地址或nil指针取消引用

  21. 21

    grpc:使用oneof会导致无效的内存地址或nil指针取消引用

  22. 22

    如何防止向量从内存地址更改

  23. 23

    为什么指针中包含的内存地址和指针的地址相同?

  24. 24

    为什么nstring obj的内存地址与iOS dev中复制的地址不同?

  25. 25

    为什么 Rust 中打印的内存地址是 40 位和 48 位地址的混合?

  26. 26

    即使内存地址不同,Pytorch变量也会更改numpy变量

  27. 27

    引用同一变量时,Swift Array的内存地址更改

  28. 28

    为什么即使返回指针指向看似有效的shellcode的内存地址,我的C代码也会引发分段错误?

  29. 29

    什么是无效的内存地址或Golang中的nil指针取消引用,如何解决?

热门标签

归档