zoukankan      html  css  js  c++  java
  • 练习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是常量不可被修改。

  • 相关阅读:
    树莓派相关知识
    yum mysql 需要:libsasl2.so.2()(64bit)的解决办法
    python 虚拟环境
    pip 查看某个包有哪些版本并升级
    C# DiagnosticSource and DiagnosticListener
    C# IObservable与IObserver观察者模式
    Visual Studio编译正常,但仍显示红线(Visual studio compiles fine but still shows red lines)
    查看PDB Guid 工具 dumpbin.exe 路径
    VMware vSphere 7.0 安装教程
    gacutil.exe 文件路径
  • 原文地址:https://www.cnblogs.com/Dark-King/p/9362825.html
Copyright © 2011-2022 走看看