我一直在努力解决这个问题几个小时,我已经搜索了对我来说有意义的每个术语。我甚至可能已经阅读了相关的答案,但却没有认出它,因为我对指针有点困惑。
所以,我有一个结构,它是一个对象链的一部分,它是一个对象链的一部分,在另一个对象中被“锚定”(如果你可以称之为),它本身就是一个链的一部分。 “锚定在主要初始化的锚点对象中。
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”中,以便我可以操作那里的值,这对我来说没有任何用处,因为我想操纵变量的SOURCE。
另外请注意,我遗漏了向下滚动链条到达我想要到达的对象的过程,并且“return_vals”似乎是任意的,但是碰巧有两个可能的候选者可能是结构我的程序正在寻找并且“return_vals”包含到目前为止找到的最佳候选者,并在找到更好的候选者时被覆盖,或者在例程结束时返回。
答案 0 :(得分:0)
你写了
values &getPointerToStruct(big *con)
{
values *return_vals;
if(con->small_anchor->vals.val==10)
return_vals=con->small_anchor->vals;
return (&return_vals);
}
我认为你想要的地方
values *getPointerToStruct(big *con)
{
values *return_vals = 0;
if(con->small_anchor->vals.val==10)
return_vals=&con->small_anchor->vals;
return (return_vals);
}
但是.
中的main_values.val++;
无论如何都是错误的。您需要确定是否要使用values*
或values&
。如果您愿意,可以使用values&
完成所有这些工作,但main_values
应该是values&
,并且在您准备初始化之前不会声明。 return_vals
作为values&
是不实际的,因为声明要求完整代码为其提供暂时的地址,该地址稍后会有条件地修改。但即使return_vals
为values*
,如果您愿意,也可以返回values&
。