1
#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++))出错。这背后的原因是什么?

4

1 回答 1

8

后增量运算符返回执行后增量操作的变量中包含的先前值的临时版本。此临时值不是左值或“命名”内存位置,因此您不能使用一元地址操作符获取该临时地址。

例如,在某些架构(如 x86 等)上,由简单 POD 类型(如 a 等)的后增量运算符生成的临时值intlong临时保存在 CPU 寄存器中,而不是实际的内存位置。在这些情况下,您根本无法获取 CPU 寄存器的“地址”。

于 2012-10-01T18:26:30.830 回答