我有一個場景,我經常使用非指針變量,包括對象。將非指針變量作爲指針的參考傳遞給函數
我想將這些變量設置爲數組中的一組現有數據,但我不想要軟拷貝,而是希望非指針變量直接指向另一個變量的內存地址。
這是一個簡單的示例代碼片段,爲我的困境。
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;
}
但是,這不會改變函數外部的變量,因爲它通過值傳遞指針。我能做的就是通過引用傳入一個指針,這意味着如果我傳入一個指針,即使在函數之後數據也會被更改。但是,如果我嘗試使用非指針變量,則在調用函數時出現此編譯錯誤。
error C2664: 'void ChangeUser(User *&)' : cannot convert argument 1 from 'User *' to 'User *&'
如果我如下創建一個指針變量,編譯器將接受它,並且將指針的數據設置爲所述陣列中的成員的指針。
但是,如果我必須使用非指針變量,是否有一種方法可以實現相同的任務?理想情況下,我希望能夠將User變量保存爲類的成員,因此不能使用本地引用變量。
「但是,如果我嘗試使用非指針變量,則在調用函數時出現此編譯錯誤。」請發佈導致此錯誤的代碼... – jpo38
@ jpo38他們做到了。 – user0042
「*我想讓非指針變量直接指向另一個變量的內存地址。」這聽起來有點不可能。 – juanchopanza