• 练习2.27、2.28、2.29


    2.27:下面哪些初始化是合法的?请说明原因。

    (a)int i=-1,&r=0;  (b)int *const p2=&i2;

    (c)const int i=-1,&r=0; (d)const int *const p3=&i2;

    (e)const int *p1=&i2;    (f)const int &const r2;

    (g)const int i2=i,&r=i;

    a)非法的。int类型变量i的取值范围是-32768~32767,所以使用-1初始化它合法,r是一个非常量引用,不能引用字面值

    b)合法。p2是一个指针常量,指针本身是常量,但是其所指的对象可以不是常量,故合法。

    c)合法。变量i是一个int类型常量,r是一个常量引用,可以引用字面值。

    d)合法。p3是一个指向常量的对象的指针常量,指针p3本身的值不可以改变,也不可以使用指针去修改指向对象的值。

    e)合法。p1是一个常量指针,其指向常量对象,不可以通过指针去修改指向的对象。

    f)不合法。引用本身不是对象,不能让引用保持不变。

    g)合法。定义一个常量变量i2,并使用变量i的值对它进行初始化,r是常量引用,常量引用可以引用任意类型的对象,表达式,字面值。

    2.28:说明下面的这些定义是什么意思,挑出其中不合法的。

    (a)int i,*const cp;  (b)int *p1,*const p2;

    (c)const int ic,&r=ic;    (d)const int *const p3;

    (e)const int *p;

    a)定义一个int类型的变量和一个指针常量cp。其中,指针常量cp不合法,指针常量定义时需要初始化。

    b)定义一个指针p1和一个指针常量p2。其中,指针常量p2不合法,指针常量定义时需要初始化。

    c)定义一个int类型的常量ic和一个常量引用r。其中常量ic需要进行初始化。

    d)定义一个指向常量的指针常量p3;不合法,指针常量定义时需要初始化。

    e)int类型的常量指针p。合法。但是常量指针p没有指向任何对象。

    2.29:假设已有上一个练习中定义的那些变量,则下面的哪些语句是合法的?请说明原因。

    (a)i=ic;  (b)p1=p3;

    (c)p1=⁣  (d)p3=⁣

    (e)p2=p1;  (f)ic=*p3;

    a)合法。ic是一个int类型的常量,用于初始化int类型的变量i,是值的拷贝,并没有修改ic的值,故合法。

    b)合法。p1是一个int类型的指针,用p3这个指向常量的指针常量去初始化它,也不会修改p3的值,但是p1是普通指针,因此语法上可以通过p1间接修改p3的值,显然是不合理的,因此非法

    c)不合法。ic是int类型的常量,只能使用常量指针才能去保存常量对象的地址,而指针p不是常量指针。

    d)合法。p3是指向常量的指针常量,因此它不能被修改,故不合法。

    e)不合法。指针p1不可以用来初始化指针常量p2,因为这样会修改了指针常量p2,故不合法。

    f)不合法。ic是常量不可被修改。

  • 相关阅读:
    【转载】loadrunner使用system()函数调用Tesseract-OCR识别验证码遇到的问题
    实现LoadRunner多个场景的顺序执行(命令行)
    BAT批处理(一)
    BAT批处理(二)
    BAT批处理(五)
    BAT批处理(六)
    BAT批处理(三)
    BAT批处理(四)
    DOS工具
    python3.0与2.x之间的区别
  • 原文地址:https://www.cnblogs.com/Dark-King/p/9362825.html
Copyright © 2020-2023  润新知