018-C++左值和右值

/**
 * 
 * // 定义一个数组
 * 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

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值