[英]How to modify a global struct when passed as a parameter to a function (c++)?
假設我有這個全局結構
struct input_shift_register
{
bool not_used;
int data;
int *ptr_to_data;
};
我想在函數中傳遞它的一個實例來修改它的數據
void share_data(input_shift_register shift) {
shift.data = 5;
}
這只會修改函數內部結構的本地副本。 我該如何修改“真正的”全局結構? 很抱歉,這可能很容易,但我無法在網上找到答案。
你基本上有2個選擇。
void share_data(input_shift_register& shift) {
shift.data = 5;
}
這將確保您的函數參數是綁定到函數參數的引用(別名),因此您正在處理在調用站點傳遞給函數的實際變量。
void share_data(input_shift_register* shift) {
shift->data = 5;
}
這將確保您正在傳遞變量的地址,因此在調用站點,您應該將地址作為參數傳遞,即share_data(&shift_register);
.
如果您確實按值傳遞(如在您的代碼中),它只會傳遞參數的副本,並且該函數將使用該副本,而不是實際變量。
有關詳細討論,請查看以下內容。
傳遞引用和傳遞值是您可以用於滿足特定需求的兩種方式。
不過,你也可以試試這個:
input_shift_register share_data(input_shift_register shift)
{
shift.data = 5;
return shift;
}
input_shift_register var;
var = share_data(var)
如果您以這種方式定義函數,則調用者可以選擇將函數的返回值分配給原始var
或同一結構的某個其他變量。
這是做同樣事情的另一種方式。 我不會說它是最佳優化的,但它可能適合某些特定要求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.