c/c++ 结构体传参问题

时间:2023-03-10 03:42:29
c/c++ 结构体传参问题

c/c++的结构体传参可以有三种方式:

  1、传递结构体变量,值传递

  2、传递结构体指针,地址传递

  3、传递结构体成员,可是值传递也可以是地址传递

根据代码示例:

1、传递结构体变量

 #include<iostream>
#define COMMANDLENGTH 100
using std::cout;
using std::endl;
//注意 c和c++中struct和typedef struct有区别。
struct Message{
int oneField;
short twoField;
char command[COMMANDLENGTH];
}message;
//c++中结构体可在类中创建也可在类外创建,使用时区别就是在类中需要用类的对象去调用。 class NewMessage{
private:
//一般用来声明变量
public:
Message Deliver(Message stu);//我让函数的返回值也是结构体,传递结构体变量
}; void main()
{
NewMessage newMessage;//创建类对象
Message tempMessage,recvMessage;
tempMessage.oneField = ;
tempMessage.twoField = ;
recvMessage = newMessage.Deliver(tempMessage);//recvMessage用来接收函数的返回值
cout << recvMessage.oneField << endl << recvMessage.twoField << endl;
system("pause");
} inline Message NewMessage::Deliver(Message stu)
{
Message temp;
temp = stu;
temp.oneField = ;
temp.twoField = ;
return temp;
} 补充:函数的执行结果会将结构体的变量值成功修改!

2.传递结构体指针,地址传递

 #include<iostream>
#define COMMANDLENGTH 100
using std::cout;
using std::endl;
//注意 c和c++中struct和typedef struct有区别。
struct Message{
int oneField;
short twoField;
char command[COMMANDLENGTH];
}message;
//c++中结构体可在类中创建也可在类外创建,使用时区别就是在类中需要用类的对象去调用。 class NewMessage{
private:
//一般用来声明变量
public:
Message Deliver(Message *stu);//我让函数的返回值也是结构体,地址传递
}; void main()
{
NewMessage newMessage;//创建类对象
Message *tempMessage = &message;//定义Message的指针变量指向message,也就是结构体的地址
Message recvMessage; tempMessage->oneField = ;
tempMessage->twoField = ;
recvMessage = newMessage.Deliver(tempMessage);//传递的是结构体的指针地址
cout << recvMessage.oneField << endl << recvMessage.twoField << endl;
system("pause");
} inline Message NewMessage::Deliver(Message *stu)
{
Message temp;
temp = *stu;
temp.oneField = ;
temp.twoField = ;
return temp;
} 补充:函数的执行结果会将结构体的变量值成功修改!

注意:把一个完整的结构体变量作为参数传递,要将全部成员值一个一个传递,费时间又费空间,开销大。如果结构体类型中的成员很多,或有一些成员是数组,则程序运行效率会大大降低。在这种情况下,用指针做函数参数比较好,能提高运行效率。

3.传递结构体成员,值传递或地址传递

  这种情况就是结构体内部的成员变量作为参数传递,可以使值传递,可以是地址传递。

 #include<iostream>
#define COMMANDLENGTH 100
using std::cout;
using std::endl;
//注意 c和c++中struct和typedef struct有区别。
struct Message{
int oneField;
short twoField;
char command[COMMANDLENGTH];
}message;
//c++中结构体可在类中创建也可在类外创建,使用时区别就是在类中需要用类的对象去调用。 class NewMessage{
private:
//一般用来声明变量
public:
int Deliver(int onefield, int twofield);
}; void main()
{
NewMessage newMessage;//创建类对象
Message *valueMessage = &message;//定义Message的指针变量指向message,也就是结构体的地址
Message addrMessage;
int sum; //值传递
/*
addrMessage.oneField = 5;
addrMessage.twoField = 10;
sum = newMessage.Deliver(addrMessage.oneField, addrMessage.twoField);
*/ //指针地址传递,引用
valueMessage->oneField = ;
valueMessage->twoField = ;
sum = newMessage.Deliver(valueMessage->oneField, valueMessage->twoField);
cout << sum<<endl;
system("pause");
} inline int NewMessage::Deliver(int onefield, int twofield)
{
int a = onefield;
int b = twofield;
return a + b;
}