今天看C和指针的时候有点对左值和右值的概念有点蒙,尽管以前看过了,emmm,反正就是学过的东西不常用就忘记了
左值: 必须是一个很明确的内存存储单元,可以用来被赋值
右值: 必须是一个能被读出来的确确实实的值,这个值可以是数据可以是指针,可以是结构,只要能被读出来都可以被定义为右值
//有如下语句定义了两个变量
char ch = 'a';
char *cp = &ch;
表达式 | 右值 | 左值 |
ch | 表示'a' | 表示ch的内存地址 |
&ch | 表示变量ch的内存地址 | 非法(当对&ch求值的时候,无法知道在计算机的哪个位置) |
cp | cp中的值,此处应该是ch的内存地址 | cp的内存地址 |
&cp | 也就是说是指向字符’a‘的指针的指针 | 非法 |
*cp | 表示’a‘ | 表示ch的内存地址 |
总结来说:右值就是表达式本身的值,左值就是&之后的值,不能&则非法