簡體   English   中英

將非指針變量傳遞給函數以作為指針的引用

[英]Passing non-pointer variable into function as a reference to pointer

我有一種情況,經常使用非指針變量,包括對象。

我想將這些變量設置為來自數組的現有數據集,但是我不希望進行軟拷貝,而是希望非指針變量直接指向另一個變量的內存地址。

這是解決我的難題的一個簡單示例代碼。

struct User
{
    unsigned int ID;
    std::string Name;

    User(int id, std::string name)
    {
        ID = id;
        Name = name;
    }
};

User data[] = 
{
    User(2, "Jane Smith"),
};

void ChangeUser(User& user)
{
    user = data[0];
}

int main()
{
    User first;
    ChangeUser(first);

    return 0;
}

如果我想要一個可以將其更改為新地址的函數,則可以將非指針對象作為指向對象的指針。

void ChangeUser(User* user)
{
    user = &data[0];
}

int main()
{
    User first;
    ChangeUser(&first);

    return 0;
}

但是,這不會改變函數外部的變量,因為它按值傳遞指針。 我所能做的就是按引用傳遞一個指針,這意味着如果我傳遞一個指針,即使在函數之后,數據也將被更改。

void ChangeUser(User*& user)
{
    user = &data[0];
}

但是,如果嘗試使用非指針變量,則會在調用函數的地方出現編譯錯誤。

error C2664: 'void ChangeUser(User *&)' : cannot convert argument 1 from 'User *' to 'User *&'

如果我按如下方式創建一個指針變量,則編譯器將接受它,並將指針數據設置為數組中成員的指針。

但是,如果我必須使用非指針變量,是否有辦法實現相同的任務? 理想情況下,我希望能夠將User變量保留為類的成員,因此不能使用局部引用變量。

編碼

User first;
ChangeUser(&first);

有效地將const User*&指針引用(rvalue)傳遞給函數(希望是非const lvalue),因此會出現錯誤。

您不能更改已分配對象的地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM