什么是左值和右值
第一次让左值右值引起我注意的时候是在刚接触字符串和指针的时候编译器对代码的一段错误提示
那什么是左值(l-value)那:
说的通俗一点就是可以放在赋值号左边的叫左值 就是可以被赋值的。是一个地址
左值一般是是一个变量可以被赋值的变量。(const变量是一个例外只能做右值)
那什么是右值(r-value)那:
同样我们可以说是可以放在赋值号右边的 就是可以给其他变量赋值的,
它可以是一个变量也可以是一个常量也可以是一个表达式。是一个内容
例如:
#include<stdio.h> int main() { char name[20]; char *adress; name="小明"; //错误的 adress="南极"; //正确的 }
name="小明";
这个语句中 字符数组 name 就不是一个左值 因为name 在定义的时候它是被分配道内存的栈中,
而 "小明" 是存储在内存的静态常量中 ,它在赋值的时候是将这个静态区的常量的首地址赋給一个指针变量,
所以name 字符数组不能做这里的左值 而且 name 本质上是一个数组 是将每个字符存储在单元格中 ,
虽然在按字符串格式输出的时候是一段字符串,但是实际上它本质上也是一个一个字符组到一起的。
如果要把一段字符串存储在字符数组中就需要把一个一个字符存储在数组中。
什么是表达式:
表达式由一个或多个操作数通过操作符组合而成。最简单的表达式仅包含一个字面值常量或变量。较复杂的表达式则由操作符以及一个或多个操作数构成。
一个变量是表达式但是一个表达式就不一定是变量了。
确切一点说一个简单的赋值语句
左值是一个地址 左值是左侧表达式所代表的地址
右值是右侧表达式所代表的内容。
但左值并不一定能被赋值,因为左值可以引用某个常量。 所有的引用都是左值。
右值是表达式的值(不是引用),可以放在赋值右面。
所以所有左值都可以做右值。
函数的引用参数
把参数声明成引用,实际上改变了缺省的按值传递参数的传递机制。在按值传递时,函数操纵的是实参的本地拷贝。当参数是引用时,函数接收的是实参的左值而不是值的拷贝。
这意味着函数知道实参在内存中的位置,因而能够改变它的值或取它的地址。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律