簡體   English   中英

如何在作為參數傳遞給函數(c++)時修改全局結構?

[英]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.

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