1. 程式人生 > >練習2.27、2.28、2.29

練習2.27、2.28、2.29

變量 類型變量 初始化 語句 也不會 上一個 常量指針 值範圍 int

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.27、2.28、2.29