取地址运算符&运算对象可以是地址吗

来源:百度知道 编辑:UC知道 时间:2024/05/29 07:04:34
例如一个小程序
#include<iostream>
using namespace std;
int main()
{
char str[]="abcdefghi";
char *p=str;
cout<<&p<<endl;
return 0;
}
编译时出错说缺少左值,不是很清楚,尽管知道这是程序不对的
打错了 是这样的
char str[]="abcdefg";
cout<<&(str+1)<<endl;

这个没问题,p就是左值。所谓左值就是能确定存储位置的值,&可以获得它的存储位置。右值则是在使用时没有可表达的存储位置,用&就是无意义的。

----

这个取决于运算符的定义,这里+运算返回的是一个右值(可以粗略地看成这个值没保存在任何变量里),所以没有地址(不可能有对应变量的位置)。

char str[]="abcdefghi"str是一个常量,常量不能取地址。