c语言左值右值,关于C ++:关于左值到右值的转换

本文详细解释了C++编程中左值到右值转换的概念,通过实例说明了在一元运算符中为何不会发生这种转换,特别是涉及数组和指针时的情况。讨论了数组名不衰减为指针以及指针类型的正确使用,强调了在使用&运算符时,不会发生左值到右值转换的重要性。
摘要由CSDN通过智能技术生成

"不对一元&运算符的操作数进行左值到右值转换。"

我可以知道这对什么意味着什么>。任何人都可以解释..请

例如:

int a[]={1,5};

int* x=&a;

好吧,这意味着从左值到右值的转换不是

完成:-)。从左值到右值的转换在您需要时发生

对象的值,而不仅仅是对其的引用。

取得对象的地址不需要该值,因此

没有左值到右值的转换。

我不确定这与您的代码有何关系。转换

在代码的第二行中没有完成的是

数组到指针的转换。左值到右值的转换

当然也没有完成,但这很直观

和正常。数组到指针的转换发生在大多数用途中

表达式中的数组,因此可能会感到惊讶

一些人。 (实际上是数组到指针的转换

仅在必要时发生。但是很少

在数组上合法的操作,所以它经常

如果是一元&运算符,则数组

指针转换不会发生(而且不会,因为

数组到指针转换的结果是一个右值,并且

一元且需要一个左值)。所以您要使用的地址

数组,其类型为int()[2],即指向数组的指针

两个int。这反过来又使分配成为非法,因为

目标类型不是int()[2],而是int *,并且没有

两者之间的隐式转换。

int a[] = {1, 5};

int* x = &a;

那是类型错误。 &运算符产生一个指向其操作数的指针。它的操作数是什么? 2个整数的数组。指向2个整数的数组的指针不是int*类型,而是int(*)[2]类型。

请注意您引用的规则在这里如何应用:在许多情况下,数组的名称会衰减为指向其第一个元素的指针。 (但是通常,数组和指针不一样!)这就是您说int* x = a;时发生的情况。但是,将&运算符应用于数组时,不会发生这种衰减。 (如果确实发生了这种转换,则&a会尝试获取a地址的地址,这是毫无意义的。)

在表达式中,从左值到右值的转换是指查看对象的值,并在需要对象值的地方使用(例如,在a + b中,您需要a和b的值来确定结果)不需要知道原始对象的来源-如果有的话。

在地址运算符中,您需要具有对象本身(即左值),该对象的值无关紧要,因此从左值到右值的转换将无济于事,它将丢失对象本身的身份(位置),即什么对讲话很重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值