Confusion about an error: lvalue required as unary '&' operand
Confusion about an error: lvalue required as unary '&' operand
我一直在尝试通过编写简单的代码来理解指针的概念,
我遇到了一个错误问题,我似乎无法解决或理解它。
#include <stdio.h>
int *foo(void);
int main(void) {
printf("%d\n", *foo());
return 0;
}
int *foo(void) {
static int num = 1;
++num;
return &(++num);
}
这是错误信息。
error: lvalue required as unary ‘&’ operand
return &(++num);
函数'foo()'returns一个指向int的指针,main应该是
使用 * 运算符打印返回的 int。对于 foo() 中的 static num,我认为通过放置 static 限定符,num 不再是临时变量,所以 '&' 可以用于 num。
++num
的结果是新值,而不是变量,因此您要获取的地址实际上并未存储在任何地方。这是外行人的解释。
C和C++相对于前缀自增运算符有区别++
。
在 C 中,结果是递增后操作数的新值。所以在这个表达式中 &(++num)
尝试获取临时对象(右值)的地址。
在 C++ 中,程序将是正确的,因为在 C++ 中,结果是更新后的操作数;它是一个左值。
即在 C 中,结果是一个新值,而在 C++ 中,结果是更新后的操作数。
所以在 C 中你可能不会写
++++++x;
而在 C++ 中这个表达式
++++++x;
是正确的,您可以将一元运算符 &
应用于表达式
&++++++x;
要使 C 中的函数正确,您必须像
那样分隔应用的运算符
int *foo(void) {
static int num = 1;
++num;
//return &(++num);
++num;
return #
}
我一直在尝试通过编写简单的代码来理解指针的概念, 我遇到了一个错误问题,我似乎无法解决或理解它。
#include <stdio.h>
int *foo(void);
int main(void) {
printf("%d\n", *foo());
return 0;
}
int *foo(void) {
static int num = 1;
++num;
return &(++num);
}
这是错误信息。
error: lvalue required as unary ‘&’ operand
return &(++num);
函数'foo()'returns一个指向int的指针,main应该是 使用 * 运算符打印返回的 int。对于 foo() 中的 static num,我认为通过放置 static 限定符,num 不再是临时变量,所以 '&' 可以用于 num。
++num
的结果是新值,而不是变量,因此您要获取的地址实际上并未存储在任何地方。这是外行人的解释。
C和C++相对于前缀自增运算符有区别++
。
在 C 中,结果是递增后操作数的新值。所以在这个表达式中 &(++num)
尝试获取临时对象(右值)的地址。
在 C++ 中,程序将是正确的,因为在 C++ 中,结果是更新后的操作数;它是一个左值。
即在 C 中,结果是一个新值,而在 C++ 中,结果是更新后的操作数。
所以在 C 中你可能不会写
++++++x;
而在 C++ 中这个表达式
++++++x;
是正确的,您可以将一元运算符 &
应用于表达式
&++++++x;
要使 C 中的函数正确,您必须像
那样分隔应用的运算符int *foo(void) {
static int num = 1;
++num;
//return &(++num);
++num;
return #
}