我不知道它可能是什么用例。我只是想知道一个函数是否会出现在C / C ++的赋值左侧。举个例子,IDAT: CRC error `' @ error/png.c/MagickPNGErrorHandler/1643
答案 0 :(得分:4)
看来您可以使用引用来做到这一点。在C ++中,即C中没有引用。
#include <iostream>
int a = 0;
int& swap(int x, int y) {
return a;
}
int main()
{
int x = 0, y = 0;
swap(x, y) = 100;
std::cout << "a is " << a << std::endl;
return 0;
}
答案 1 :(得分:2)
C 2018 6.5.16 2说:
赋值运算符的左值应为可修改的左值。
左值是可以指定对象的表达式(例如对象名称或*p
表达式,其中*
应用于指向对象的指针)。在C语言中,函数调用表达式不是左值。
答案 2 :(得分:1)
正如其他人所提到的,如果函数返回引用,因为引用是一个左值,则可以在C ++中完成此操作。
您不能直接将 分配给C中函数的返回值,因为它不是左值。但是,如果函数返回一个指针,则可以取消引用它。这将为您提供一个左值,然后您可以为其分配 then 。
int x;
int *getx()
{
return &x;
}
int main()
{
printf("x=%d\n", x); // prints 0
*getx() = 4;
printf("x=%d\n", x); // prints 4
}
答案 3 :(得分:1)
在C语言赋值表达式中,左操作数必须设计一个对象,右操作数将存储在该对象中。这意味着解析为可分配对象的 conditional-expression 都将起作用。
但是,由于C中的不存在引用对象的概念,因此您不能直接使用赋值左侧的函数。相反,它在存在的C ++中是可能的。即在C ++中,您可以:
$scope.link= "https://www.w3schools.com"
在C语言中,您可以使用一个小技巧来模拟以前的行为:使函数返回指向该对象的指针,然后在赋值之前对返回值进行解引用。考虑以下片段:
int &obj(int pos);
...
obj(0) = 3;
函数int *GetPtr(int pos);
...
*GetPtr(0) = 3;
返回对我们取消引用和分配的对象的引用。