📄 习题4.16 .html
字号:
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(a)
int i;</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(b)
const int ic;</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(c)
const int *pic;</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(d)
int *const cpi;</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(e)
const int *const cpic;</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>(a) 合法:定义了int型对象i。</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>(b) 非法:定义const对象时必须进行初始化,但ic没有初始化。</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>(c) 合法:定义了指向int型const对象的指针pic。</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>(d) 非法:因为cpi被定义为指向int型对象的const指针,但该指针没有初始化。</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>(e) 非法:因为cpic被定义为指向int型const对象的const指针,但该指针没有初始化。</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm'>习题4.20 </p>
</div>
<p class=XT>下列哪些初始化是合法的?为什么?</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(a)
int i = -1;</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(b)
const int ic = i ;</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(c)
const int *pic = &ic;</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(d)
int *const cpi = &ic;</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(e)
const int *const cpic = &ic;</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-indent:19.0pt;
text-autospace:none'>(a) 合法:定义了一个int型对象i,并用int型字面值-1对其进行初始化。</p>
<p class=MsoNormal align=left style='text-align:left;text-indent:19.0pt;
text-autospace:none'>(b) 合法:定义了一个int型const对象ic,并用int型对象对其进行初始化。</p>
<p class=MsoNormal align=left style='text-align:left;text-indent:19.0pt;
text-autospace:none'>(c) 合法:定义了一个指向int型const对象的指针pic,并用ic的地址对其进行初始化。</p>
<p class=MsoNormal align=left style='text-align:left;text-indent:19.0pt;
text-autospace:none'>(d) 不合法:cpi是一个指向int型对象的const指针,不能用const int型对象ic的地址对其进行初始化。</p>
<p class=MsoNormal align=left style='text-align:left;text-indent:19.0pt;
text-autospace:none'>(e) 合法:定义了一个指向int型const对象的const指针cpic,并用ic的地址对其进行初始化。 </p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题4.21 </p>
</div>
<p class=XT>根据上述定义,下列哪些赋值运算是合法的?为什么?</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(a)
i = ic; (b) pic = &ic;</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(c)
cpi = pic; (d) pic = cpic;</p>
<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(e)
cpic = &ic; (f) ic = *cpic;</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>(a)、(b)、(d)合法。</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>(c)、(e)、(f)均不合法,因为cpi、cpic和ic都是const变量(常量),常量不能被赋值。</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题4.22 </p>
</div>
<p class=XT>解释下列两个while循环的差别:</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>const char *cp = "hello";</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>int cnt;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>while (cp) { ++cnt; ++cp; }</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>while (*cp) { ++cnt; ++cp; }</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>两个while循环的差别为:前者的循环结束条件是cp为0值(即指针cp为0值);后者的循环结束条件是cp所指向的字符为0值(即cp所指向的字符为字符串结束符null(即'\0'))。因此后者能正确地计算出字符串"hello"中有效字符的数目(放在cnt中),而前者的执行是不确定的。</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>注意,题目中的代码还有一个小问题,即cnt没有初始化为0值。</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm'>习题4.23 </p>
</div>
<p class=XT>下列程序实现什么功能?</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>const char ca[] = {'h', 'e', 'l', 'l', 'o'};</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>const char *cp = ca ;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>while (*cp) {</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> cout << *cp << endl;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> ++cp;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>}</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal style='text-indent:19.0pt;text-autospace:none'>该程序段从数组ca的起始地址(即字符'h'的存储地址)开始,输出一段内存中存放的字符,每行输出一个字符,直至存放0值(null)的字节为止。(注意,输出的内容一般来说要多于5个字符,因为字符数组ca中没有null结束符。)</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题4.24 </p>
</div>
<p class=XT>解释strcpy和strncpy的差别在哪里,各自的优缺点是什么?</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>strcpy和strncpy的差别在于:前者复制整个指定的字符串,后者只复制指定字符串中指定数目的字符。</p>
<p class=MsoNormal style='text-autospace:none'>strcpy比较简单,而使用strncpy可以适当地控制复制字符的数目,因此比strcpy更为安全。</p>
<div style='border:none;border-bottom:solid #999999 1.0pt;padding:0cm 0cm 1.0pt 0cm;
margin-left:1.4pt;margin-right:1.4pt'>
<p class=aff2 style='margin-top:8.0pt;margin-right:0cm;margin-bottom:4.0pt;
margin-left:0cm;text-indent:6.0pt'>习题4.25 </p>
</div>
<p class=XT>编写程序比较两个string类型的字符串,然后编写另一个程序比较两个C风格字符串的值。</p>
<p class=aff4>【解答】</p>
<p class=MsoNormal align=left style='text-align:left;text-autospace:none'>比较两个string类型的字符串的程序如下:</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>//比较两个string
类型的字符串</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>#include <iostream></p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>#include <string></p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>using namespace std;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>int main()</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>{</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> string str1, str2;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> //输入两个字符串</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> cout << "Enter two
strings:" << endl;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> cin >> str1 >> str2;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> //比较两个字符串</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> if (str1 > str2)</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> cout
<< "\"" << str1 << "\""
<< " is bigger than " </p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> <<
"\"" << str2 << "\"" << endl;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> else if (str1 < str2)</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> cout
<< "\"" << str2 << "\""
<< " is bigger than " </p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> <<
"\"" << str1 << "\"" << endl;</p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> else </p>
<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'> cout
<< "They are equal" << endl;</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -