#include<stdio.h>
int swap(int *a,int *b);
int main()
{
int a=10,b=20;
swap(&a++,&b++);
printf("a=%d\nb=%d",a,b);
return 0;
}
int swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
为什么这个函数会报错“invalid lvalue in unary '&'”?
普通 swap(&a,&b)
工作正常,但 swap(&a++,&b++)
以及 swap(&(a++),&(b++))
给出错误。这背后的原因是什么?
最佳答案
后递增运算符返回包含在执行后递增操作的变量中的先前值的临时版本。此临时值不是左值或“命名”内存位置,因此您不能使用一元寻址运算符获取该临时值的地址。
例如,在 x86 等某些架构上,从简单 POD 类型(如 int
、long
)的后增量运算符生成的临时值等将暂时保存在 CPU 寄存器中,而不是实际的内存位置。在这些情况下,您根本无法获取 CPU 寄存器的“地址”。
关于c - 为什么 swap(&a++,&b++) 给出错误 "invalid lvalue in unary ' &'"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12678838/