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小时内删除。