首先結構體做函式引數有三種傳遞方式
一是傳遞結構體變數,這是值傳遞,二是傳遞結構體指標,這是位址傳遞,三是傳遞結構體成員,當然這也分為值傳遞和位址傳遞。
以傳引用呼叫方式傳遞結構比用傳值方式傳遞結構效率高。以傳值方式傳遞結構需要對整個結構做乙份拷貝。
下面看乙個列子,student結構體中包含該學生的各種資訊,我們在change函式中對其進行部分修改,再在主函式中輸出其結果
1.下面傳遞結構體變數
#include
#include
#define format "%d\n%s\n%f\n%f\n%f\n"
struct student
;void change( struct student stu );
int main()
void change(struct student stu)
可以看到最終輸出的值並未改變。。。
2.位址傳遞
#include
#include
#define format "%d\n%s\n%f\n%f\n%f\n"
struct student
;void change( struct student* stu );
int main()
void change(struct student* p)
可以看到,通過位址傳遞修改了結構體內的資料
用&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...