使用函数处理struct数据类型的值

时间:2012-11-18 09:45:56

标签: c++ function struct

我正在学习C ++中的结构类型,我试图编写一个可以改变结构类型变量成员值的函数。 但是,它产生了意想不到的输出,我无法弄清楚为什么会发生这种情况。     / 用于测试结构类型的程序 /

#include <iostream>
#include <cstring>
using namespace std;
struct myStruct
{
    string a;
    string b;
    int c;
    float d;
};

void assignValues(myStruct myobj)
{
    myobj.a = "foobar";
    myobj.b = "Foo Bar";
    myobj.c = 12;
    myobj.d = 15.223;
}
int main()
{
    myStruct x;
    cout << x.a <<endl;
    //x.a = "Hello world";
    //x.b = "This is C++";
    //x.c = 10;
    //x.d = 13.1332;
    assignValues(x);
    cout << x.a<<endl;
    cout << x.b << endl;
    cout << x.c << endl;
    cout << x.d << endl;
}

如果我使用单独的赋值语句(我在代码中注释掉了)而不是assignValues()函数,我得到了预期的输出。

PS:我对输出的预期值如下: foob​​ar的, Foo Bar, 12, 15.223

2 个答案:

答案 0 :(得分:3)

通过引用assignValue函数传递myStruct参数,因此可以修改它:

void assignValues(myStruct& myobj)
                         ^^^ pass by reference
{
    myobj.a = "foobar";
    myobj.b = "Foo Bar";
    myobj.c = 12;
    myobj.d = 15.223;
}

答案 1 :(得分:0)

虽然您可以将指针传递给函数:

void assignValues(myStruct* myobj) //<---- pointer
{
    myobj->a = "foobar";
    myobj->b = "Foo Bar";
    myobj->c = 12;
    myobj->d = 15.223;
}