【问题标题】:Unexpected result while passing struct to a function将结构传递给函数时出现意外结果
【发布时间】:2013-09-13 05:40:03
【问题描述】:

我想传递一个结构来实现类似下面的功能(我知道我可以将单个成员传递给像 input(int age, string s) 这样的功能,但我想像 input(student 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。它不会在 main 中打印

【问题讨论】:

  • 出现错误或输出?
  • @shobi 如果我将名字输入“abc”并将年龄输入到 10。它不会在 main 中打印
  • 请检查答案:)

标签: c++ pointers struct


【解决方案1】:

您的函数会生成输入的本地副本。看来您需要通过引用传递:

void input(student& s) { .... }
//                ^

默认情况下,函数参数是按值传递的,所以这个问题不是特定于类的。例如,

void increment_not(int i) { ++i; }

int i = 41;
increment_not(i);
std::cout << i << std::endl; // prints 41

【讨论】:

    【解决方案2】:

    您的函数通过值传递student s,这就是main 中的变量s1 不会改变的原因。

    将其更改为传递引用:

    void input(student& s)
    //                ^
    

    【讨论】:

      【解决方案3】:

      你需要通过引用传递结构,现在你通过副本传递它,所以无论进行什么更改,它们都在传递的对象的副本上。

      void input(student& s){....}
      

      【讨论】:

        猜你喜欢
        • 2012-05-09
        • 2012-10-15
        • 2020-04-25
        • 2015-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多