返回一个指针,从函数指向在main()中初始化的对象

Return a pointer from a function to an object initialized in main()

本文关键字:main 初始化 对象 一个 指针 返回 函数      更新时间:2023-10-16

我已经为这个问题挣扎了几个小时了,我已经搜索了每一个对我有意义的术语。我甚至可能已经通读了一个相关的答案,但没有意识到它是这样的,因为我对指针有点困惑。

所以,我有一个结构体,它是一个对象的一部分,这个对象是另一个对象链的一部分,这个对象链被"锚定"在另一个对象中,这个对象本身是一个链的一部分,这个链被"锚定"在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"包含迄今为止找到的最佳候选,当找到更好的候选时被覆盖,或者在例程结束时返回。

你写了

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&