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

检测点7-11

[复制链接]

620

主题

336

回帖

1057

积分

管理员

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

1.若左值的类型分别是指向const char的指针、const char和const限定的指向char的指针,则左值转换后,这些值的类型各是什么?
答:分别是const char、char和char *。

2.在源文件c0708.c中,语句S2、S5、S7、S12和S17的第二个参数都是左值且要执行左值转换,转换后的值各自是什么类型?
答:直接就程序以注释的形式作答。
void f1 (const int * p1)
{
    * p1 = 65533;        //S1
    printf ("%d\n", * p1);//S2:左值* p1的类型是const int,故左值转换后的类型是int。
}

void f2 (const int * const p2)
{
    int m = 0;

    p2 = & m;                                        //S3:非法!
    * p2 = 260;                                //S4:非法!
    printf ("%d\n", * p2);        //S5:左值* p2的类型是const int,故左值转换后的类型是int。
}

int main (void)
{
    const int cx = 0;
    cx = 65533;                                //S6:非法!
    printf ("%d\n", cx);        //S7:左值cx的类型是const int,故左值转换后的类型是int
    * (int *) & cx = 65533;        //S8:合法,但非常危险!

    int x = 0, y = 0;
    const int * pc = & x;
    * pc = 77;                                //S9:非法!
    pc = & y;                                        //S10:合法
    * pc = 78;                                //S11:非法,与指向哪个对象无关!
    printf ("%d\n", * pc);        //S12:左值* pc的类型是const int,故左值转换后的类型是int。
    f1 (& x);                                        //S13:合法
    f1 (pc);                                        //S14:合法

    const int * const cpc = & x;
    * cpc = 79;                                //S15:非法!
    cpc = & y;                                //S16:非法!
    printf ("%d\n", * cpc);        //S17:左值* cpc的类型是const int,故左值转换后的类型是int。
    f2 (& x);                                        //S18:合法
    f2 (cpc);                                        //S19:合法
}

3.若对象的类型是const限定的指向int的指针,则该对象的值可以修改吗?该对象所指向的对象的值可以修改吗?
答:该对象不可修改,该对象指向的对象可以修改。

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

本版积分规则

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

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

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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