C語言關於結構體做引數傳遞

2021-06-23 05:40:42 字數 1150 閱讀 6801

首先結構體做函式引數有三種傳遞方式

一是傳遞結構體變數,這是值傳遞,二是傳遞結構體指標,這是位址傳遞,三是傳遞結構體成員,當然這也分為值傳遞和位址傳遞。

以傳引用呼叫方式傳遞結構比用傳值方式傳遞結構效率高。以傳值方式傳遞結構需要對整個結構做乙份拷貝。 

下面看乙個列子,student結構體中包含該學生的各種資訊,我們在change函式中對其進行部分修改,再在主函式中輸出其結果

1.下面傳遞結構體變數

可以看到最終輸出的值並未改變。。。

2.位址傳遞

可以看到,通過位址傳遞修改了結構體內的資料

用&stu做實參,&stu是結構體變數stu的位址。在呼叫函式時將該位址傳送給形參p(p是指標變數)。這樣p就指向stu。

在change函式中改變結構體內成員的值,在主函式中就輸出了改變後的值

3.結構體成員的位址傳遞和值傳遞

這個類似於單一變數的傳遞,這裡也沒必要說了,當然是位址傳遞才能修改。

把乙個完整的結構體變數作為引數傳遞,要將全部成員值乙個乙個傳遞,費時間又費空間,開銷大。如果結構體型別中的成員很多,或有一些成員是陣列,則程式執行效率會大大降低。在這種情況下,用指標做函式引數比較好,能提高執行效率。

C語言關於結構體做引數傳遞

首先結構體做函式引數有三種傳遞方式 一是傳遞結構體變數,這是值傳遞,二是傳遞結構體指標,這是位址傳遞,三是傳遞結構體成員,當然這也分為值傳遞和位址傳遞。以傳引用呼叫方式傳遞結構比用傳值方式傳遞結構效率高。以傳值方式傳遞結構需要對整個結構做乙份拷貝。下面看乙個列子,student結構體中包含該學生的各...

結構體做函式引數 c

作用 將結構體作為引數箱函式中傳遞 傳遞的方式 include includeusing namespace std 定義學生結構體 struct student 列印學生資訊的函式 1 值傳遞 void printstuinfo struct student s 位址傳遞,外側的資料也會發生變化 ...

C語言 結構體引數

結構體是值專遞,形參會複製,開銷很大 直接調結構體變數是沒有意義的,區別於陣列變數是代表了陣列的首元素位址 pragma warning disable 4996 include include struct s void test struct s a void main printf x n a...