这是执行代码
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()不会更改,也不得针对对象更改。