2023-06-26 19:28:19 | 我爱编程网
在C语言学习过程中,大家或许听到过左值和右值的概念,甚至在调试程序时编译器也会给出” left operand must be l-value ” 即左操作数必须为左值!,今天我们将为大家详细解释这两个词,以及两者的区别!
简单而言,在赋值运算符“=”左边的就是左值,在赋值运算符“=”后边的就是右值,感觉像是废话,但非常好理解。但更多时候,我们是为了学习和理解不同情况下左值和右值的区别,下面来举例依次说明,着层深入,来让大家解渴!
如 x = 2;
这里x为整形变量,这里作为左值,代表的是一块内存单元,表示的是地址。
再如x = y;
现在看变量做右值情况,y做右值,这里呢就不在表示地址,而是代表该内存单元上的值!然后赋给x。
继续 x = 2;
这里2做右值, 2是一个常量,没有任何疑问。
而如果 1 = 2;
这里我们看左值,是1是常量,这里就会有问题了,编译会报错!因为常量不可被修改、不可以被赋值!所以大家可能会听过或见过”可修改/不可修改的左值”。
例如有字符数组char a[100];
当a做右值时候,我们可以把它赋给char *类型的指针,用来指向这个数组,这种情况下数组名做右值代表该数组首元素的首地址,是常量,是完全可以的。
而数组名无论右值和还是左值,都代表是地址,是常量,因此它不可以做左值,因为常量不可被修改!所以不少同学试图再定义数组之后再试图对数组赋字符串都是错误的!
字符串常量想必大家都很清楚,是用双引号括起来的字符串,既然也是常量,也理所当然不可以做左值,但做右值呢?
答案是,会表示该字符串在内存中存储位置的首地址。就就是char * p = “dotcpp.com”;用法的原因。我爱编程网
以上四种,希望对大家深入理解左值和右值有帮助!大家有任何问题,请随时留言讨论!
关于c语言的一些概述性问题 关于c语言的一些概述性问题 1.c语言规定,变量命名必须符合标识符的命名规则,例如:floatUS$这样就是错误的,因为出现了非法字符:$ 2.在整形常量中,不可包含”,“,比如:1,200 3.指数后面必须为指数;若想要表示字符”\”,应该写为:”\“ 4.
客评价谭浩强C语言书到底好不好近来,总听到有一些吐槽谭浩强C语言入门这个本书的问题,在业内掀起一阵跟风行为,也令不少打算入门的同学选择困难,今天通过此文表达一个客观公正的观点。我总结了一下吐槽谭浩强书不好的几个点:1.陈旧,有错误,比如voidmain问题2.太注重理论,过多++a+b++这种绕圈子的问题,太过应试不利于能力培养其实,这本作为第一批清华大学出版,用于全国各地高校的第一本大规模推
关于c语言的一些概述性问题 关于c语言的一些概述性问题 1.c语言规定,变量命名必须符合标识符的命名规则,例如:floatUS$这样就是错误的,因为出现了非法字符:$ 2.在整形常量中,不可包含”,“,比如:1,200 3.指数后面必须为指数;若想要表示字符”\”,应该写为:”\“ 4.
客评价谭浩强C语言书到底好不好近来,总听到有一些吐槽谭浩强C语言入门这个本书的问题,在业内掀起一阵跟风行为,也令不少打算入门的同学选择困难,今天通过此文表达一个客观公正的观点。我总结了一下吐槽谭浩强书不好的几个点:1.陈旧,有错误,比如voidmain问题2.太注重理论,过多++a+b++这种绕圈子的问题,太过应试不利于能力培养其实,这本作为第一批清华大学出版,用于全国各地高校的第一本大规模推
C语言自定义函数如何返回数组(下) C语言自定义函数如何返回数组(下) 通过上一篇的讲解,相信大家已经明白直接的return数组的问题以及原因了,今天我们将详细为大家讲解在函数中返回数组的常见办法。此类问题,应用场景往往为了解决函数间相互通信,比如某个函数内处理的完的结果数据需要交接给另一个函数的情况,那么一般来说,总结有以下三种: 直接使用全局变量:这种方法最方便,但此方法打
C语言自定义函数如何返回数组(上) C语言自定义函数如何返回数组(上) 最近看到一些同学问题,有提到说:如何在一个函数中返回数组呢?能否直接在自定义函数中,写成char*类型返回值,直接返回呢?,代码如下: 直接返回str数组名(注意不需要加&,还有好多同学犯这个错)但事实上,运行结果并非正常,我们尝试在调用函数中输出,可以看到结果并非是原来内容(当然你的电脑输出可能还不
C语言逆向之表达式短路分析及应用 C语言逆向之表达式短路分析及应用 大家在学习C语言过程中,可能会见到过一些这样的题,就是表达式短路,表达式短路主要体现在C语言中逻辑运算符&&和||。今天将对表达式短路的做逆向分析,来深入理解它。 首先利用表达式短路,我们可以写一个很经典的累加求和的函数,代码如下: 功能很简单,就是求1+2+…+99+100的数
C语言中左值和右值的区别 C语言中左值和右值的区别 在C语言学习过程中,大家或许听到过左值和右值的概念,甚至在调试程序时编译器也会给出”leftoperandmustbel-value”即左操作数必须为左值!,今天我们将为大家详细解释这两个词,以及两者的区别! 简单而言,在赋值运算符“=”左边的就是左值,在赋值运算符“=&r
2023-09-13 13:02:53
2023-09-21 21:18:47
2023-06-26 19:36:09
2023-07-16 10:35:19
2023-07-16 10:26:24
2023-06-26 23:28:31