1 回答
TA贡献1821条经验 获得超4个赞
t := *q复制指向的结构体q。
如果您想观察qthrough 的变化t,请坚持使用指针:
var (
p = Vertex{1, 2} // has type Vertex
q = &Vertex{1, 2} // has type *Vertex
r = Vertex{X: 1} // Y:0 is implicit
s = Vertex{} // X:0 and Y:0
)
func main() {
t := q
q.X = 4
u := *q
fmt.Println(p, q, r, s, t, u, *t == u)
}
这会产生您可能正在寻找的输出。
{1 2} &{4 2} {1 0} {0 0} &{4 2} {4 2} true
我不确定你觉得什么特别奇怪。C 和 C++ 的行为方式相同。考虑以下:
#include <iostream>
struct Vertex
{
int x;
int y;
};
std::ostream& operator<<(std::ostream& out, const Vertex& v)
{
out << "{ " << v.x << ", " << v.y << " }";
return out;
}
int main()
{
Vertex v = Vertex{1, 2};
Vertex* q = &v;
Vertex t = *q;
q->x = 4;
std::cout << "*q: " << *q << "\n";
std::cout << " t: " << t << "\n";
}
此 C++ 代码的输出显示了相同的行为:
*q: { 4, 2 }
t: { 1, 2 }
- 1 回答
- 0 关注
- 178 浏览
添加回答
举报