在函数之间传递struct变量

时间:2015-02-03 21:37:38

标签: c++ function struct

我只是一个简单的问题。我正在尝试使用某些函数制作一个向量加法程序,但是当我快速运行它来检查数字时输出仍为0。

void input(struct vectors v1, struct vectors v2);
void addition (struct vectors  v1, struct  vectors v2);

struct vectors {
  int x;
  int y;
  }v1, v2;

  int main(int argc, const char * argv[]) {


    input(v1, v2);
    addition(v1, v2);
  }


  void input(struct vectors v1,struct vectors v2){

    cout << "Input x and y componenets of vector 1" << endl;
    cin >> v1.x;
    cin >> v1.y;
    cout << "Input x and y componenets of vector 2" << endl;
    cin >> v2.x;
    cin >> v2.y;

  }

  void addition ( vectors v1,  vectors  v2){

    int xsum = v1.x +v2.x;
    int ysum = v1.y +v2.y;

    cout << "sum of the x variables is " << xsum << endl << "sum of the y variables is " << ysum <<endl;

  }

2 个答案:

答案 0 :(得分:2)

在函数input中,您只修改输入参数的副本。要查看调用函数中可见的更改,请通过引用传递参数。

void input(struct vectors& v1,struct vectors& v2){

    cout << "Input x and y componenets of vector 1" << endl;
    cin >> v1.x;
    cin >> v1.y;
    cout << "Input x and y componenets of vector 2" << endl;
    cin >> v2.x;
    cin >> v2.y;

}

此外,由于您使用的是C++,因此您可以使用:

void input(vectors& v1, vectors& v2){

答案 1 :(得分:0)

目前,您正在按值传递结构,因此当您调用该函数时,会生成结构的副本,并且在该函数中您只是修改副本。相反,通过引用传递:

void input( vectors& v1, vectors& v2 ) {

另外,在另一个函数中,为避免进行不必要的复制,可以通过常量引用传递结构:

void addition( const vectors& v1, const vectors& v2 ) {