首页 > 其他 > 详细

左值和右值

时间:2020-05-27 22:34:45      阅读:46      评论:0      收藏:0      [点我收藏+]

左值(L-value):能用“取地址&”运算符获得对象的内存地址,表达式结束后依然存在的持久化对象。左值可以出现在等号左边也能够出现在等号右边。

右值(R-value):不能用“取地址&”运算符获得对象的内存地址,表达式结束后就不再存在的临时对象。只能出现在等号右边。

可以做出以下两点理解:

    1)当一个对象被用作右值的时候,用的是对象的值(内容);而被用作左值的时候,用的是对象的身份(在内存中的位置)。总之:

       左值看地址,右值看内容

    2)所有的具名变量或者对象都是左值,而右值不具名。很难得到左值和右值的真正定义,但是有一个可以区分左值和右值的便捷方法:

       看能不能对表达式取地址,如果能,则为左值,否则为右值

    特例:因为可以用&取得字符串字面值常量的地址,虽然它不能被赋值,但它是一个左值。

int main()
{
    char *p = "1234";
    printf("%d\n", p);
    printf("%d\n", &"1234");
}

为什么左值不能用&取地址呢?

    1)对于临时对象,它可以存储于寄存器中,所以没办法用“取地址&”运算符;

    2)对于(非字符串常量,它可能被编码到机器指令的“立即数”中,所以没办法用“取地址&”运算符。

 

左值和右值

原文:https://www.cnblogs.com/yanghh/p/12976780.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!