本文主要是介绍c/c++ 结构体传参问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
c/c++的结构体传参可以有三种方式:
1、传递结构体变量,值传递
2、传递结构体指针,地址传递
3、传递结构体成员,可是值传递也可以是地址传递
根据代码示例:
1、传递结构体变量
1 #include<iostream>2 #define COMMANDLENGTH 1003 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 1003 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 1003 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 }
注:转载仅作为笔记使用,如有侵权,请联系删除
这篇关于c/c++ 结构体传参问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!