簡體   English   中英

我應該在傳遞結構時放置 & 嗎?

[英]Should I put & while passing a struct?

下面的代碼正在傳遞結構變量:

struct someStruct {
    unsigned int total;
};

int test(struct someStruct* state) {
    state->total = 4;
}

int main () {
    struct someStruct s;
    s.total = 5;
    test(&s);
    printf("\ns.total = %d\n", s.total);
}

(來自Pass struct by reference in C的來源)

在 C++ 中編程時,我可以在沒有&的情況下傳遞這個結構嗎? 我是說

test(s); // or should test(&s);

如果我這樣做會s復制嗎?

在 C++ 中,您可以將 function 用作參數:

int test(someStruct& state) {
    state.total = 4;
}

您可以像這樣調用 function:

someStruct s;
test(s);

不會復制。 在 function 內部, state的行為就像是s 注意, struct關鍵字僅在 C++ 中聲明 struct 時才需要。 此外,在 C++ 中,您的打印代碼應如下所示:

std::cout << "s.total = " << s.total << std::endl;

您必須包含iostream才能使其正常工作。

當您想要更改您傳遞給 function 的結構的內容時,您應該傳遞一個指針或通過引用傳遞,否則 function 將修改正在創建的本地副本。

您可以傳遞一個指針

int test(struct someStruct* state);

通過引用傳遞

int test(struct someStruct &state);

在這兩種情況下,都不會創建副本,並且會修改原始結構。
重要的是要注意通過引用傳遞是一種更 C++ 的方式。

test(&s);

傳遞一個指向-s 的指針。 您將在您當前定義的接受指針的 function 中使用它:

int test(struct someStruct* state) 

如果您想通過引用傳遞,您可以將 function 定義更改為

int test(struct someStruct& state) 

並簡單地調用:

test(s)

在測試中你會改變你的代碼來使用. 而不是->

暫無
暫無

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

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