练习2.272.282.29
Posted dark-king
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了练习2.272.282.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是常量不可被修改。
以上是关于练习2.272.282.29的主要内容,如果未能解决你的问题,请参考以下文章