Я изучаю типы структур в 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
Передайте аргумент myStruct по ссылке в функцию assignValue, чтобы его можно было изменить:
void assignValues(myStruct& myobj)
^^^ pass by reference
{
myobj.a = "foobar";
myobj.b = "Foo Bar";
myobj.c = 12;
myobj.d = 15.223;
}
Хотя вы можете передать указатель на функцию:
void assignValues(myStruct* myobj) //<---- pointer
{
myobj->a = "foobar";
myobj->b = "Foo Bar";
myobj->c = 12;
myobj->d = 15.223;
}