gpt4 book ai didi

c++ - 返回意外结构值的函数

转载 作者:太空狗 更新时间:2023-10-29 23:44:16 25 4
gpt4 key购买 nike

我对结构和用户定义的数据类型完全陌生,我试图创建一个返回结构的函数:

问题在评论中突出显示:

#include <iostream>

using namespace std;

struct num {
int n[2];
};

num func( num x, int a, int b) {
x.n[0] = a+b;
x.n[1] = a*b;
return x;
}

int main() {
int x,y;
num s1;
cout << "enter: ";
cin >> x >> y;
func(s1,x,y);
cout << s1.n[0] << "\n" << s1.n[1]; // THIS GIVES ERROR
cout << func(s1,x,y).n[0] << "\n" << func(s1,x,y).n[1]; // THIS DOENST GIVE ERROR
return 0;
}

我知道第二种方法有意义并返回结构变量。然后放一个点地址结构的内部变量。

但我不明白为什么第一种方法失败,或者给出奇怪的输出。该函数完成了它的工作,即 s1.n[0] = x + ys1.n[1] = x*y
现在,打印 s1.n[0] 应该只打印 x + y。我们如何检查和纠正函数的内部工作?

最佳答案

必须将返回值赋给main中的结构对象

s1 = func(s1,x,y);

在主体内部,函数处理原始对象的拷贝。它不会更改原始对象,因为它是按值传递的。

另一种方法是通过引用传递结构

void func( num &x, int a, int b) {
x.n[0] = a+b;
x.n[1] = a*b;
}

在这种情况下,您可以在 main 中编写

func(s1,x,y);

或者您甚至可以使用所谓的 C 方法通过引用传递

void func( num *x, int a, int b) {
x->n[0] = a+b;
x->n[1] = a*b;
}

并称它为

func( &s1, x, y );

至于这个说法

cout << func(s1,x,y).n[0] << "\n" << func(s1,x,y).n[1];  

然后您访问函数的两次调用所返回的两个临时对象的数据成员。执行此语句后,这些临时对象将被删除。

关于c++ - 返回意外结构值的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33331720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com