0

私は 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: 出力に期待する値は次のとおりです: foobar、Foo Bar、12、15.223

4

2 に答える 2

3

myStruct 引数を参照によって assignValue 関数に渡し、変更できるようにします。

void assignValues(myStruct& myobj)
                         ^^^ pass by reference
{
    myobj.a = "foobar";
    myobj.b = "Foo Bar";
    myobj.c = 12;
    myobj.d = 15.223;
}
于 2012-11-18T10:04:38.853 に答える
0

関数へのポインタを渡すことはできますが:

void assignValues(myStruct* myobj) //<---- pointer
{
    myobj->a = "foobar";
    myobj->b = "Foo Bar";
    myobj->c = 12;
    myobj->d = 15.223;
}
于 2012-11-18T10:09:05.480 に答える