2014-02-27 94 views
3

我們的編碼風格是當我們修改結構的內容時,我們將指向結構的指針傳遞給函數。將指針傳遞給struct作爲參數的好處?

但是,當我們不修改結構的內容時,是否還有任何理由更喜歡將指針傳遞給函數的結構?

回答

6

優勢在於傳遞的大小:當您傳遞一個大的struct時,編譯器會生成代碼以複製該struct,如果您按值傳遞它的話。這會浪費CPU週期,並且可能會在程序用完堆棧空間時出現問題,特別是在資源稀缺的硬件(如嵌入式微控制器)中。

當你傳遞一個struct的指針,你知道該函數不能進行修改它,聲明指針const強制執行這個規則:

void take_struct(const struct arg_struct *data) { 
    data->field = 123; // Triggers an error 
} 
3

是的,指針的大小通常遠小於整個結構的大小。您節省了堆棧和時間。