/**
*
* // 定义一个数组
* char strHelloWorld[] = {"helloworld"};
* char* pStrHelloWorld = "helloworld";
*
* pStrHelloWorld = strHelloWorld; // 指针变量的值允许改变
* strHelloWorld = pStrHelloWorld; // 数组变量的值不允许改变
*
* 字符数组不是一个左值,只能是一个右值,不能放在赋值运算符的左侧
*
* 左值和右值
*
* 一般说法,编译器为其单独分配一块存储空间,可以取其地址的,左值
* 可以放在赋值运算符的左边。
*
* 右值指的是数据本身,不能取到其自身地址(&),右值只能在赋值运算符右侧
*
* 具体分析:
* 左值最常见的情况如函数和数据成员的名字
* 右值没有标识符,不可以取地址的表达式,一般也称之为“临时对象”
* 比如: a = b+c;
* &a是允许的操作,而&(a+b)不能通过编译
* 因此a是一个左值,而(b+c)是一个右值。
*
*/
#include<iostream>
using namespace std;
int main(int argc, char const *argv[])
{
/* code */
int b, c = 10;
int a = b+c;
// (b+c) 是数据自身,是右值, 不能取地址
//cout<<a<<&(b+c)<<endl;
cout<<&a<<endl;
return 0;
}
输出如下:
0x7ffeee231104