C++如何改变一个

rt4zxlrg  于 2022-11-27  发布在  其他
关注(0)|答案(1)|浏览(105)

这是我的问题,我得到了这段代码,它需要写出2,5,1,来表示变量a,b,c。但问题是main不应该改变,只应该改变函数。我设法把b改为5,但我真的不知道如何不使用指针把a改为2。代码如下:

#include <iostream>

using namespace std;

int& function(int a, int* b, int c) {
    
    return *b;
}

int main()
{
    int a, b, c;
    a = b = c = 1;
    function(a, &b, c) = 5;
    cout << a << " , " << b << " , " << c << endl;
    return 0;
}

我们将非常感谢您的帮助。
我尝试使用指针,但不应更改main。

slmsl1lt

slmsl1lt1#

如果你不能修改函数签名,那么这是一个可怕的问题。正如所写的,这是不可能的。编译器可以假设a将保持为1。
有一种教授我见过,会希望你把:

int& function(int a, int* b, int c) 
{
    b[1] = 2;
    return *b;
}

但这依赖于UB、特定架构和 * 禁用 * 优化。https://godbolt.org/z/rc1d9oqab
如果允许修改函数签名,那么就传递一个a的引用。

相关问题