c/c++的結構體傳參可以有三種方式:
1、傳遞結構體變量,值傳遞
2、傳遞結構體指針,地址傳遞
3、傳遞結構體成員,可是值傳遞也可以是地址傳遞
根據代碼示例:
1、傳遞結構體變量
1 #include<iostream> 2 #define COMMANDLENGTH 100 3 using std::cout; 4 using std::endl; 5 //注意 c和c++中struct和typedef struct有區別。 6 struct Message{ 7 int oneField; 8 short twoField; 9 char command[COMMANDLENGTH]; 10 }message; 11 //c++中結構體可在類中創建也可在類外創建,使用時區別就是在類中需要用類的對象去調用。 12 13 class NewMessage{ 14 private: 15 //一般用來聲明變量 16 public: 17 Message Deliver(Message stu);//我讓函數的返回值也是結構體,傳遞結構體變量 18 }; 19 20 void main() 21 { 22 NewMessage newMessage;//創建類對象 23 Message tempMessage,recvMessage;24 25 tempMessage.oneField = 5; 26 tempMessage.twoField = 10; 27 recvMessage = newMessage.Deliver(tempMessage);//recvMessage用來接收函數的返回值 28 cout << recvMessage.oneField << endl << recvMessage.twoField << endl; 29 system("pause"); 30 } 31 32 inline Message NewMessage::Deliver(Message stu) 33 { 34 Message temp; 35 temp = stu; 36 temp.oneField = 10; 37 temp.twoField = 20; 38 return temp; 39 } 補充:函數的執行結果會將結構體的變量值成功修改!
2.傳遞結構體指針,地址傳遞
1 #include<iostream> 2 #define COMMANDLENGTH 100 3 using std::cout; 4 using std::endl; 5 //注意 c和c++中struct和typedef struct有區別。 6 struct Message{ 7 int oneField; 8 short twoField; 9 char command[COMMANDLENGTH]; 10 }message; 11 //c++中結構體可在類中創建也可在類外創建,使用時區別就是在類中需要用類的對象去調用。 12 13 class NewMessage{ 14 private: 15 //一般用來聲明變量 16 public: 17 Message Deliver(Message *stu);//我讓函數的返回值也是結構體,地址傳遞 18 }; 19 20 void main() 21 { 22 NewMessage newMessage;//創建類對象 23 Message *tempMessage = &message;//定義Message的指針變量指向message,也就是結構體的地址 24 Message recvMessage; 25 26 tempMessage->oneField = 5; 27 tempMessage->twoField = 10; 28 recvMessage = newMessage.Deliver(tempMessage);//傳遞的是結構體的指針地址 29 cout << recvMessage.oneField << endl << recvMessage.twoField << endl; 30 system("pause"); 31 } 32 33 inline Message NewMessage::Deliver(Message *stu) 34 { 35 Message temp; 36 temp = *stu; 37 temp.oneField = 10; 38 temp.twoField = 20; 39 return temp; 40 } 補充:函數的執行結果會將結構體的變量值成功修改!
注意:把一個完整的結構體變量作爲參數傳遞,要將全部成員值一個一個傳遞,費時間又費空間,開銷大。如果結構體類型中的成員很多,或有一些成員是數組,則程序運行效率會大大降低。在這種情況下,用指針做函數參數比較好,能提高運行效率。
3.傳遞結構體成員,值傳遞或地址傳遞
這種情況就是結構體內部的成員變量作爲參數傳遞,可以使值傳遞,可以是地址傳遞。
1 #include<iostream> 2 #define COMMANDLENGTH 100 3 using std::cout; 4 using std::endl; 5 //注意 c和c++中struct和typedef struct有區別。 6 struct Message{ 7 int oneField; 8 short twoField; 9 char command[COMMANDLENGTH]; 10 }message; 11 //c++中結構體可在類中創建也可在類外創建,使用時區別就是在類中需要用類的對象去調用。 12 13 class NewMessage{ 14 private: 15 //一般用來聲明變量 16 public: 17 int Deliver(int onefield, int twofield); 18 }; 19 20 void main() 21 { 22 NewMessage newMessage;//創建類對象 23 Message *valueMessage = &message;//定義Message的指針變量指向message,也就是結構體的地址 24 Message addrMessage; 25 int sum; 26 27 //值傳遞 28 /* 29 addrMessage.oneField = 5; 30 addrMessage.twoField = 10; 31 sum = newMessage.Deliver(addrMessage.oneField, addrMessage.twoField); 32 */ 33 34 //指針地址傳遞,引用 35 valueMessage->oneField = 5; 36 valueMessage->twoField = 10; 37 sum = newMessage.Deliver(valueMessage->oneField, valueMessage->twoField); 38 cout << sum<<endl; 39 system("pause"); 40 } 41 42 inline int NewMessage::Deliver(int onefield, int twofield) 43 { 44 int a = onefield; 45 int b = twofield; 46 return a + b; 47 }
注:轉載僅作爲筆記使用,如有侵權,請聯繫刪除