C程序中需要作为一元“&”操作数的左值

C程序中需要作为一元“&”操作数的左值,c,arrays,C,Arrays,有人能解释一下C代码最后一行中错误的原因吗?我正在尝试打印一维数组元素的地址。 数组a定义为: int a[5]={1,2,3,4,5}; printf("%p",a+1); //No Error printf("%p",&a); //No Error printf("%p",&(a+1)); //lvalue required as unary '&' operand Error 因为a是一个数组,有存储地址,但a+1是一个没有保存到变量的操作,&a+1表示

有人能解释一下C代码最后一行中错误的原因吗?我正在尝试打印一维数组元素的地址。 数组a定义为:

int a[5]={1,2,3,4,5};

printf("%p",a+1); //No Error 

printf("%p",&a); //No Error 

printf("%p",&(a+1)); //lvalue required as unary '&' operand Error

因为a是一个数组,有存储地址,但a+1是一个没有保存到变量的操作,&a+1表示该操作的地址,在C中没有任何意义。因此,编译器会将它作为一个位运算符找到,因此会出现此错误。

什么是a?它的数据类型是什么?所有这些都是错误的。printf%p接受一个void*//没有错误,只有一个警告,对吗?如果数组是[…],则需要+1。数组a衰减为指针。。。。或&a[1]。@alk谢谢。它已更新。但错误消息显示:左值必须作为一元“&”操作数,而按位&运算符是二进制运算符。问题是+1不是左值,并且不能获取右值的地址。