当前位置: 首页 > 面试题库 >

为什么数组的&(地址)在行中打印“&”

范修伟
2023-03-14
问题内容

这是执行代码

package main

func main() {

    var ax [2]int
    ax[0] = 22
    ax[1] = 99

    bx := ax
    cx := &ax

    fmt.Println(ax)
    fmt.Println(bx)
    fmt.Println(cx)
    fmt.Printf("%p\n", cx)

}

当我执行它时,它给我以下输出

PS C:\personal\gospace> ./bin/test
[22 99]
[22 99]
&[22 99]
0xc0420381d0

cx := &ax正确地将cx解释为指针。但是,当我打印cx时,它会打印,&[22 99]而当我打印&ax[0]%p格式化cx时,它会正确地打印地址。为什么会这样呢?


问题答案:

默认的打印动词fmt.Println使用是%v。虽然在打印区分价值VS指针值,这就是为什么你看到&前面cx

fmt.Println(cx)

接下来,您具体告诉fmt.Printf使用动词%p,请参阅“ 打印”部分,然后进行打印base 16 notation, with leading 0x

fmt.Printf("%p\n", cx)


 类似资料:
  • 这可能是显而易见的事情,但我错过了。为什么我需要用0xff执行AND来获取ip地址?我的看法是完全一样的,用0xff执行AND应该让位保持不变,那么如果我不执行AND操作,为什么它不起作用呢?

  • 问题内容: 我正在学习amd64汇编程序,并尝试实现一个简单的Unix过滤器。由于未知的原因,甚至简化为最低版本(下面的代码),它也会随机崩溃。 我试图在GNU调试器(gdb)中调试该程序。在gdb的默认配置下,该程序运行良好,但是如果启用地址随机化(),该程序将开始崩溃(SIGSEGV)。清单中标记了有问题的说明: 该程序旨在从stdin读取最多64kB的数据,将其存储到堆栈中的缓冲区中,将读取

  • 问题内容: Java中是否有真正的并行数组用例?维护相互关联的N个数组似乎太麻烦了。 例: 我可以创建一个Person类并将对象存储在一个数组中。会贵一点,但是好用得多吗? 问题答案: 并行数组是对诸如Basic(原始语言)之类语言的保留,这些语言除数组外没有其他数据结构。您应该按照您的建议定义对象。

  • 问题内容: 我有以下代码: 如果我没有在goroutine中从缓冲区读取的代码,它会输出这样的消息,这是我期望发生的事情: 但是,将其放在goroutine中不会打印任何内容。 有人可以解释为什么吗? 问题答案: 函数完成后,您的程序将退出。这很可能在您的goroutine有时间运行并打印其输出之前发生。 一种选择是从通道读取主goroutine块,并在完成工作后将goroutine写入通道。

  • 问题内容: 我知道Go没有任何构造函数,而是在其中使用a ,但是根据此示例。 他们总是回来。为什么仅仅返回就还不够? 更新资料 我尝试过为简单的结构返回创建的对象,这很好。因此,我想知道返回地址是否是构造函数的标准方法或其他方法。 谢谢。 问题答案: 如前所述,是的,规范允许您返回值(作为非指针)或指针。这只是您必须做出的决定。 什么时候返回指针? 通常,如果您返回的值作为指针“更有用”。什么时候

  • 问题内容: 在Javadoc中,Object.hashCode()指出 在合理可行的范围内,由class定义的hashCode方法确实为不同的对象返回不同的整数。(这通常是通过将对象的 内部地址 转换为整数来实现的,但是Java™编程语言不需要此实现技术。) 这是一个常见的误解,它与内存地址有关,但没有关系,因为它可以在不通知的情况下发生更改,并且hashCode()不会更改,也不得针对对象更改。