【发布时间】:2018-01-26 10:47:25
【问题描述】:
我想将字符串切片转换成指向字符串的指针切片
values1 := []string{"a", "b", "c"}
var values2 []*string
for _, v := range values1 {
fmt.Printf("%p | %T\n", v, v)
values2 = append(values2, &v)
}
fmt.Println(values2)
%!p(string=a) => 字符串
%!p(string=b) => 字符串
%!p(string=c) => 字符串
[0xc42000e1d0 0xc42000e1d0 0xc42000e1d0]
据我了解,
我的变量v 似乎是一个字符串,而不是指向字符串的指针。
因此v在迭代时应该从values1复制过来。
显然我不正确,因为v 仍然有相同的地址0xc42000e1d0。 v 不是指针,值怎么变化?
如需快速解决方案,请使用:
values1 := []string{"a", "b", "c"}
var values2 []*string
for i, _ := range values1 {
values2 = append(values2, &values1[i])
}
【问题讨论】:
标签: string pointers for-loop go memory