用C和go语言分别打印int类型地址的,进行对比。
C版本:
#include <stdio.h>
int main()
{
int a=0;
printf("%p\n", &a);
return 0;
}
输出:0x7fff5510b888
可以看到输出地址为12位16进制格式。
go版本:
package main
import (
"fmt"
)
func main() {
a := 1
fmt.Printf("%p\n", &a)
}
输出:0x8201c82d0
可以看到输出的地址为8位16进制格式。
问题来了:
为什么地址空间长度不一致?
是不是意味着go的地址空间范围比c小,
哦,go不支持指针运算。
这2个地址没啥可比性,一个是真实的地址(C&C++),一个是跑在GC上的地址。
输出
PS: 上面的例子其实并不是很适合,但能看出来同样的数据类型,在go和c里面地址空间是不同的。
之所以说这个例子不是很合适是因为:
所以在MyPrint里的参数和外面的参数不是引用到同样的一个内存空间。但该例子应该能说明同样的int类型,在go和C里面的地址格式是有区别的。