当前位置:网站首页>关于左值和右值的一些问题总结[通俗易懂]
关于左值和右值的一些问题总结[通俗易懂]
2022-07-25 14:05:00 【全栈程序员站长】
大家好,又见面了,我是你们的朋友全栈君。
在C语言当中,我们经常会遇见一些平时感觉怎么用都不会出错的小知识点,但是再将它的难度提高一点点的时候,或者将它改变一点点,我们就不再将它用起来那么的得心应手。左值和右值正是一个这样的十足十的例子。在学习了指针知识之后,高度理解左值与右值便不再显得那么的无聊。
这个解释看起来有点傻,但是不得不说:
左值就是那些能够出现在赋值符号左边的东西,右值就是那些能够出现在赋值符号右边的东西。
例如:a=b+25;
这里,a是左值,它标识了一个可以存储结果值的点,也就是说,他有一个可以自己掌控的固定的空间,b+25是右值,因为他指定了一个值。
那么他们可以互换吗?
例如:b+25=a;
答案当然是不可以;
注意,当计算机计算b+25时它的结果必然保存在机器的某个地方。但是程序员并没有办法预测该结果会存储在什么地方,也无法保证下一次这个表达式的值仍然会存在原来的那个地放。其结果就是b+25不能当左值。因为他没有固定的标识一个点。
但是a可以作为一个右值,因为每个位置都包括了一个值。
所以总结了来看:
左值:我们主要用他的空间 ;
右值:我们主要用他的值。
字面值常量都不能为左值。
为了巩固上面的所学理论,也为了让我们更加的了解怎么回事,我们现在开始将下面的例子深入讨论:
当有代码:
char ch=‘a’;
char *cp=&ch;
那我们来看看下面的代码是什么意思?能否做左值?能否做右值?
&ch; //&ch是地址常量,只能做左值,不能做右值;
cp; //cp是一个变量,既有存储空间,又有值,所以左值和右值都可以做;
&cp; //&cp是地址常量,只能做右值,不能做左值。
*cp+1; //它的运算顺序是,现将cp解引用,再将cp的值加1,所以是一个常量(在本题中,他表示给a+1,也就是字符b),只能做右值,不能左值;
*(cp+1); //这里的运算表示ch之后的一块空间(读取cp下一个空间的内容),既可以做左值,又可以做右值;
++cp; //这里表示给ch的地址加1,也就是给地址常量加1,可以做右值,不可以做左值;
cp++; //理由与++cp的理由相同;
*++cp; //先自加,在解引用,表示了ch的下一个空间(读取下一个空间的内容),既可以做左值,又可以做右值;
*cp++; //理由同上;
(*cp)++; //表示将ch的地址加1,是一个常量,不可以做左值,但是可以做右值;
++*++cp; //表示对ch下一块空间地址的前置++,是一个常量,不可以做左值,但是可以做右值;
++*cp++; // 表示对ch的空间地址先前置++,在后置++,是一个常量,不能做左值,但是可以做右值。
好了,先到这里吧
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/127557.html原文链接:https://javaforall.cn
边栏推荐
- Pytest.mark.parameterize and mock use
- 【Platform IO编译Hifive1-revB】*** [.pio\build\hifive1-revb\src\setupGPIO.o] Error 1的解决办法
- 飞沃科技IPO过会:年营收11.3亿 湖南文旅与沅澧投资是股东
- Arduino code of key state machine for realizing single, double click, long press and other functions with esp32 timed interrupt
- NoSQL, relational database, row and column database comparison and analogy
- IDEA设置提交SVN时忽略文件配置
- 金鱼哥RHCA回忆录:CL210管理存储--管理共享文件系统
- 埃拉托斯特尼筛法
- sieve of eratosthenes
- [original] nine point calibration tool for robot head camera calibration
猜你喜欢

Brush questions - Luogu -p1075 prime factor decomposition

Practice of online problem feedback module (13): realize multi parameter paging query list

应急科普|收好这份暑期安全指南,让孩子安全过暑假!

Business data analysis of CDA level1 knowledge point summary

MXNet对DenseNet(稠密连接网络)的实现

ADB connects to Xiaomi mobile phone via Wi Fi

职场「数字人」不吃不睡007工作制,你「卷」得过它们吗?

Day1: 130 questions in three languages

手把手教学Yolov7的搭建及实践

Use of Bluetooth function of vs wireless vibrating wire acquisition instrument
随机推荐
MySQL 01: Source command
Applet enterprise red envelope function
OKA通证权益解析,参与Okaleido生态建设的不二之选
Business analysis report and data visualization report of CDA level1 knowledge point summary
埃拉托斯特尼筛法
依迅总经理孙峰:公司已完成股改,准备IPO
Brush questions - Luogu -p1151 sub number integer
2271. 毯子覆盖的最多白色砖块数 ●●
Day1: 130 questions in three languages
「数字安全」警惕 NFT的七大骗局
einsum(): operands do not broadcast with remapped shapes [original->remapped]: [1, 144, 20, 17]->[1,
Detailed explanation of nat/napt address translation (internal and external network communication) technology [Huawei ENSP]
Digital Twins - cognition
[configure hifive1 revb] the device manager does not recognize the port, and can not connect to j-link via USB
Day1:三种语言暴刷牛客130题
dp-851
Alibaba mqtt IOT platform "cloud product circulation" practice - the two esp32 achieve remote interoperability through the IOT platform
@Wrap decorator
What problems should SEOER pay attention to when baidu searches and attacks pirated websites?
What financial products can I invest with some money in my hand?