cc++结构体传参问题c/c++的结构体传参可以有三种⽅式:
1、传递结构体变量,值传递
2、传递结构体指针,地址传递
3、传递结构体成员,可是值传递也可以是地址传递
根据代码⽰例:
1、传递结构体变量
1 #include<iostream>
2#define COMMANDLENGTH 100
3using std::cout;
4using std::endl;
5//注意 c和c++中struct和typedef struct有区别。
6struct Message{
7int oneField;
8short twoField;
9char command[COMMANDLENGTH];
10 }message;
11//c++中结构体可在类中创建也可在类外创建,使⽤时区别就是在类中需要⽤类的对象去调⽤。
12
13class NewMessage{
14private:
15//⼀般⽤来声明变量
16public:
17 Message Deliver(Message stu);//我让函数的返回值也是结构体,传递结构体变量
18 };
19
20void main()
21 {
22 NewMessage newMessage;//创建类对象
23 Message tempMessage,recvMessage;24
25 Field = 5;
26 tempMessage.twoField = 10;
27 recvMessage = newMessage.Deliver(tempMessage);//recvMessage⽤来接收函数的返回值
28 cout << Field << endl << recvMessage.twoField << endl;
29 system("pause");
30 }
31
32 inline Message NewMessage::Deliver(Message stu)
33 {
34 Message temp;
35 temp = stu;
36 Field = 10;
37 temp.twoField = 20;
38return temp;
39 }
补充:函数的执⾏结果会将结构体的变量值成功修改!
2.传递结构体指针,地址传递
1 #include<iostream>
2#define COMMANDLENGTH 100
3using std::cout;
4using std::endl;
5//注意 c和c++中struct和typedef struct有区别。
6struct Message{
7int oneField;
8short twoField;
9char command[COMMANDLENGTH];
10 }message;
11//c++中结构体可在类中创建也可在类外创建,使⽤时区别就是在类中需要⽤类的对象去调⽤。
12
结构体数组不能作为参数传递给函数13class NewMessage{
14private:
15//⼀般⽤来声明变量
16public:
17 Message Deliver(Message *stu);//我让函数的返回值也是结构体,地址传递
18 };
19
20void 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 << Field << endl << recvMessage.twoField << endl;
30 system("pause");
31 }
32
33 inline Message NewMessage::Deliver(Message *stu)
34 {
35 Message temp;
36 temp = *stu;
37 Field = 10;
38 temp.twoField = 20;
39return temp;
40 }
补充:函数的执⾏结果会将结构体的变量值成功修改!
注意:把⼀个完整的结构体变量作为参数传递,要将全部成员值⼀个⼀个传递,费时间⼜费空间,开
销⼤。如果结构体类型中的成员很多,或有⼀些成员是数组,则程序运⾏效率会⼤⼤降低。在这种情况下,⽤指针做函数参数⽐较好,能提⾼运⾏效率。
3.传递结构体成员,值传递或地址传递
这种情况就是结构体内部的成员变量作为参数传递,可以使值传递,可以是地址传递。
1 #include<iostream>
2#define COMMANDLENGTH 100
3using std::cout;
4using std::endl;
5//注意 c和c++中struct和typedef struct有区别。
6struct Message{
7int oneField;
8short twoField;
9char command[COMMANDLENGTH];
10 }message;
11//c++中结构体可在类中创建也可在类外创建,使⽤时区别就是在类中需要⽤类的对象去调⽤。
12
13class NewMessage{
14private:
15//⼀般⽤来声明变量
16public:
17int Deliver(int onefield, int twofield);
18 };
19
20void main()
21 {
22 NewMessage newMessage;//创建类对象
23 Message *valueMessage = &message;//定义Message的指针变量指向message,也就是结构体的地址
24 Message addrMessage;
25int sum;
26
27//值传递
28/*
29 Field = 5;
30 addrMessage.twoField = 10;
31 sum = newMessage.Field, 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 {
44int a = onefield;
45int b = twofield;
46return a + b;
47 }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论