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