我想问个问题,今天无意中产生的,因为本人纯纯学生,用的很老的vc6.0,今天写一个练习题,就是
定义了一个int a〔3〕〔3〕;
然后引用第一行的地址,
我发现写成&a〔0〕;这么写没问题
但是写成&(a〔0〕+0);就会报错error C2102:‘&’ requires l-value
这是为啥啊,这俩东西不应该是一样的吗。
a[0]不是一个地址,不能这么取地址。&操作符的操作数需要是一个左值
对于一个二维数组,a[0]是一个变量(左值),可以取地址&a[0]。a[0]+0后变成一个数值(右值),不能取值
比如a[0]是0x1234,那么a[0]+0就是0x1234,那么&(0x1234)明显是不可以的,我们不能对一个常量取地址。
a[0]是变量,定义它的时候就有了地址,所以可以用&进行取址操作;而a[0]+0进行了运算,成为了一个常量,它存在于汇编指令中,没有地址,也就无从谈起取地址了。