C++结构体传参问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/liubing8609/article/details/82624142

C++结构体传参问题

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

  1. 传递结构体变量,值传递;
  2. 传递结构体指针,地址传递;
  3. 传递结构体成员,可是值传递也可以是地址传递。

1. 传递结构体变量:值传递

#include<iostream>

#define COMMANDLENGTH 100

using std::cout;

using std::endl;

// 注意CC++structtypedef 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;24

    tempMessage.oneField = 5;

    tempMessage.twoField = 10;

    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 = 10;

    temp.twoField = 20;

    return  temp;

}

补充:函数的执行结果会将结构体的变量值成功修改!

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

#include<iostream>

#define COMMANDLENGTH 100

using std::cout;

using std::endl;

// 注意CC++structtypedef 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 = 5;

    tempMessage->twoField = 10;

    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 = 10;

    temp.twoField = 20;

    return  temp;

}

补充:函数的执行结果会将结构体的变量值成功修改!

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

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

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

#include<iostream>

#define COMMANDLENGTH 100

using std::cout;

using std::endl;

//注意 cC++structtypedef 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 = 5;

    valueMessage->twoField = 10;

    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;

}

猜你喜欢

转载自blog.csdn.net/liubing8609/article/details/82624142