我想传递一个结构来实现类似下面的功能(我知道我可以将单个成员传递给函数,如input(int age,string s)但我想传递整个结构,如输入(学生))
#include <iostream>
using namespace std;
struct student
{
string name;
int age;
};
void input(student s)
{
cout << "Enter Name: ";
cin >> s.name;
cout << "Enter age: ";
cin >> s.age;
}
int main(int argc, char *argv[]) {
struct student s1;
input(s1);
cout << "Name is: " << s1.name << endl;
cout << "Age is: " << s1.age << endl;
}
上面的代码没有产生正确的输出,我想用指针上面的代码来获得预期的输出。
测试:如果我将名称输入“abc”并且年龄改为10.它不会在主页上打印
答案 0 :(得分:5)
您的函数会生成输入的本地副本。看起来你需要通过引用传递:
void input(student& s) { .... }
// ^
默认情况下,函数参数按值传递,因此此问题不是特定于类的。例如,
void increment_not(int i) { ++i; }
int i = 41;
increment_not(i);
std::cout << i << std::endl; // prints 41
答案 1 :(得分:1)
您的函数按值传递student s
,这就是s1
中变量main
不会更改的原因。
将其更改为传递参考:
void input(student& s)
// ^
答案 2 :(得分:0)
你需要通过引用传递结构,现在你通过副本传递它,所以无论做什么更改它们都在传递对象的副本上。
void input(student& s){....}