首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

大家帮忙,左值和右值的区别,该怎么处理

2012-03-03 
大家帮忙,左值和右值的区别飞天翼剑大牛的文章,写的,以下是链接http://blog.csdn.net/supermegaboy/articl

大家帮忙,左值和右值的区别

飞天翼剑大牛的文章,写的,以下是链接

http://blog.csdn.net/supermegaboy/article/details/4855027

以下代码是该文章的部分

C/C++ code
#include <stdio.h> struct Test{    int a[10];}; struct Test fun( struct Test* ); int main( void ){    struct Test T;    int *p = fun( &T ).a;                         /* A */    int (*q)[10] = &fun( &T ).a;                  /* B */    printf( "%d", sizeof( fun( &T ).a ) );       /* C*/    return 0;} struct Test fun( struct Test *T ){    return *T;} 



作者提到: 在这个例子里,fun( &T )的返回值是一个右值,fun( &T ).a就是一个右值数组,是一个右值表达式,但a本身是一个左值表达式,要注意这个区别。


作者提到 右值数组和左值表达式的问题。 实在不懂作者的意思,



为了搞清楚左值和右值的区别,于是写了以下代码:

以下代码是看了

C/C++ code
#include <stdio.h>struct Test{    int a[10];};struct Test fun( struct Test* );int main( void ){    struct Test T;    fun(&T).a[0]=1;    printf("%d",fun(&T).a[0]);    system("pause");        return 0;}struct Test fun( struct Test *T ){    return *T;}


这个代码打印的结果是垃圾值, fun(&T).a[0]=1, 值没有赋值成功。  


问题1: 函数的返回值算左值还是右值?
问题2. fun(&T).a[0]=1, 值没有赋值成功。 什么原因?

问题3: 数组分左 ,右, 什么意思?

[解决办法]
fun(&T)返回的是个临时的,因此赋值没用,下次执行fun(&T)又返回另一个临时对象

说Test::a是左值,你看fun(&T).a=0是否行得通
[解决办法]
左值在运算符左边,右值在运算符右边。


KK
[解决办法]
&是获得地址,只有变量才可能有地址啊

*和& *的操作数是右值,结果是左值——用地址换变量。&的操作数是左值,结果是右值——用变量换地址
[解决办法]
又是一个一头栽在没有实际意义的左右值概念里的兄弟啊。
[解决办法]
别问这些

变量可能在寄存器中,但内存中也预留了空间

热点排行