demo作为一个自定义的类型
我取了他的内存地址,分两次对他的字段进行赋值,aaa和bbb.
但是当我最终打印demo时,似乎两次都没有影响到demo;
请问这是什么原理?
另外请问(*ccc).name
这是个什么意思什么原理?
我翻了好几本书都没看到有详细的解释. 感谢
代码
type demo struct {
name string
age int
}
//取指针
aaa := &demo{}
aaa.name = "Mr.suck"
aaa.age = 19
logrus.Println(aaa)
///????
ccc := &aaa
(*ccc).name = "JackMa"
logrus.Println(aaa)
//打印原始demo struct
logrus.Println(demo{})
//去指针
bbb := &demo{}
bbb.name = "Ms.suck"
bbb.age = 20
logrus.Println(bbb)
//打印原始demo struct
logrus.Println(demo{})
执行结果
INFO[0000] &{Mr.suck 19}
INFO[0000] { 0}
INFO[0000] &{Ms.suck 20}
INFO[0000] { 0}
Exiting.
丫,和你的有点不一样A
下面是我的代码
输出使用fmt,没有使用logrus
输出内容:
%p 占位符是打印出地址
%v 占位符打印出默认值
我的理解:
其他
(*ccc).name 是什么?
(*ccc).name 是获取ccc指针指向的结构体里面的name字段
golang 里面也有和 c 相同数据类型:指针
指针的值一般是一个变量的地址. 例如: var x int, 表达式 &x 就是获取一个指向整型变量的指针. 它的类型是整型指针(*int). 如果我们写成这样方式: p := &x; 我们就是说 p 指向x的地址.
表达式*p 就是 获取表达式的值
.重点:golang中的指针功能被弱化了,比如上面的 p := &x; 中不可以使用x++;也就是说golang中不能进行指针自增减操作,但在c中是可以的
最后一条内容的输出,如有不理解可参考下面关于指针转换的链接;
参考
golang中关于指针的一小部分内容
golang中关于指针的转换?
c 语言中的指针: 请biying或者参考一下 <<C和指针>> 这书
请教:在fmt.Printf写法中fmt.Printf("%v %p\n",aaa,aaa),我能不能只写一个aaa参数,让%v,%p都可以用尼? o(╥﹏╥)o