【发布时间】:2015-11-02 22:38:19
【问题描述】:
我已经为这个问题苦苦挣扎了几个小时,我已经搜索了每一个对我有意义的术语。我什至可能已经阅读了相关的答案,但没有认出它,因为我对指针有点困惑。
所以,我有一个结构,它是一个对象的一部分,它是一个对象链的一部分,该对象链“锚定”(如果你可以这么称呼它)在另一个对象中,它本身就是一个链的一部分,即“锚定”在 main 中初始化的锚对象中。
struct values
{
double val, ues;
}
class small
{
public:
values vals;
}
class big
{
public:
small *small_anchor;
}
values &getPointerToStruct(big *con)
{
values *return_vals;
if(con->small_anchor->vals.val==10)
return_vals=con->small_anchor->vals;
return (&return_vals);
}
int main()
{
values *main_values=NULL;//This is supposed to be pointing to the "vals" struct contained inside the "small" object.
big *big_anchor;
big_anchor = new big;
big_anchor->small_anchor = new small;
big_anchor->small_anchor->vals.val=10;
big_anchor->small_anchor->vals.ues=5;
main_values = getPointerToStruct(&big_anchor);//now main_values should be pointing to the "vals" struct
//I want to manipulate the value INSIDE the object itself
main_values.val++;
}
我已经尝试了&、* 的所有组合,但我没有想出任何前缀,但没有什么能给出我希望的结果。我得到的“最接近”是将“vals”(从对象内部)复制到“main_values”中,以便我可以操纵那里的值,这对我没有任何用处,因为我想操纵变量的源。
另外请注意,我省略了向下滚动链以到达我试图到达的对象的过程,并且“return_vals”似乎是任意的,但碰巧有两个可能的候选者可能是我的结构程序正在寻找,“return_vals”包含迄今为止找到的最佳候选者,当找到更好的候选者时被覆盖,或者在例程结束时返回。
【问题讨论】:
-
使用
return *return_vals在你实际上实例化了values的一个实例并将指针分配给return_vals,否则你会得到UB。 -
"我已经尝试了
&、*的所有组合" - 你做错了
标签: c++ pointers object struct return