找回密码
 立即注册
搜索
热搜: 活动 通知
查看: 72|回复: 0

检测点7-4

[复制链接]

620

主题

336

回帖

1057

积分

管理员

积分
1057
发表于 2026-3-7 19:21:46 | 显示全部楼层 |阅读模式
检测点7-4

1.左值转换的本质是什么?
答:左值转换的本质是替换,也就是用左值代表的那个对象的值替换左值本身。

2.为什么赋值运算符的左操作数不执行左值转换?为什么一元&运算符的操作数也不执行左值转换?
答:左值转换的结果是值,但值不能被赋值和取地址,只有作为实体的对象才可以被赋值和取地址。

3.在源文件c0702.c中,语句S4里的x、* p、* q和S5里的x是左值吗?如果是,它们是否需要执行左值转换?为什么?
答:在语句S4里,x、* p 和 * q都是左值,在语句S5里,x也是左值。
在语句S4里,x不能执行左值转换,因为它是赋值运算符的左操作数,需要接受赋值;* p和* q需要执行左值转换,因为它们符合左值转换的要求(从另一个方面来看,相加操作是在数值之间进行的)。
在语句S5里,x需要执行左值转换,因为它符合左值转换的要求(从另一个方面来看,由于它是函数的实参,函数调用传递的是值,所以必须转换)。

4.在源文件c0703.c中,语句S2里的b和* (int *) b是左值吗?如果是,它们是否需要执行左值转换?为什么?
答:b和* (int *) b是两个我们目前可以确认的左值("%llu,%d\n"也是左值但还没讲过,初学者是认不出来的)。它们都需要执行左值转换,因为它们符合左值转换的要求(从另一个方面来看,由于它们是函数的实参,函数调用传递的是值,所以必须转换)。

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|鼠侠网 ( 吉ICP备19001332号 )

GMT+8, 2026-3-30 16:11 , Processed in 0.240923 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表