C++primer[習題][第二章][21-30]

  • 2.21

int i = 0;

double dp = &i; //int類型的值不能初始化double*類型的實體。

int ip = i; //int類型的值不能初始化int類型的實體。
int *p = &i; //正確。

  • 2.22

if(p) //如果p不爲空則爲真

if(*p) //如果 *p的值非0則爲真

  • 2.23

首先要確定指針是否合法,才能判斷它指的對象是不是合法的。

  • 2.24

int i = 42;

void *p = &i; //void指針可以指向任何類型的對象。

long lp = &i; //int類型的值不能初始化long*類型的實體。

  • 2.25

int * ip, i, &r = i; //ip爲int*類型, i爲int型, r是i的引用。

int i, *ip = 0; //i爲int型, ip爲空指針。

int * ip, ip2; //ip爲int*類型, ip2爲int型。

  • 2.26

const int buf; //不合法,buf必須初始化。

int cnt = 0; //合法。

const int sz = cnt; //合法。

++cnt; ++sz; //不合法,const對象不能改變。

  • 2.27

int i = -1, &r = 0; //不合法,r必須引用一個對象。

int *const p2 = &i2; //合法。

const int i = -1, &r = 0; //合法。

const int *const p3 = &i2; //合法。

const int *p1 = &i2; //合法。

const int &const r2; //不合法,r2必須引用一個對象,引用沒有頂層const。

const int i2 = i, &r = i; //合法。

  • 2.28

int i, *const cp; //不合法,const指針需要初始化。

int *p1, *const p2; //不合法,const指針需要初始化。

const int ic, &r = ic; //不合法,ic需要初始化。

const int *const p3; //不合法,const指針需要初始化。

const int *p; //合法。

  • 2.29

i = ic; //合法,常量賦值給普通變量。

p1 = p3; //不合法,p3是const指針,不能賦值給普通指針。

p1 = ⁣ //不合法,普通指針不能指向常量。

p3 = ⁣ //合法,p3是常量指針並且指向常量。

p2 = p1; //合法,可以將普通指針賦值給常量指針。

ic = *p3; //合法,p3解引用後是const int型,然後賦值給ic。

  • 2.30
const int v2 = 0;
int v1 = v2;
int *p1 = &v1, &r1 = v1;
const int *p2 = &v2, *const p3 = &i, &r2 = v2;

v2是頂層const,p2是底層const,p3靠右的是底層const靠左的是頂層const,r2是底層const。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章