⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 习题4.16 .html

📁 c++ primer 答案(第4版) 自己整理的 只有1-5章
💻 HTML
📖 第 1 页 / 共 5 页
字号:
<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 = &amp;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 = &amp;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 = &amp;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; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (b) pic = &amp;ic;</p>

<p class=MsoNormal align=left style='text-align:left;layout-grid-mode:char;
punctuation-trim:none;text-autospace:none'>(c)
cpi = pic;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (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 = &amp;ic;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (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 = &quot;hello&quot;;</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'))。因此后者能正确地计算出字符串&quot;hello&quot;中有效字符的数目(放在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'>&nbsp;&nbsp;&nbsp; cout &lt;&lt; *cp &lt;&lt; endl;</p>

<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>&nbsp;&nbsp;&nbsp; ++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 &lt;iostream&gt;</p>

<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>#include &lt;string&gt;</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'>&nbsp;&nbsp;&nbsp; string str1, str2;</p>



<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>&nbsp;&nbsp;&nbsp; //输入两个字符串</p>

<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>&nbsp;&nbsp;&nbsp; cout &lt;&lt; &quot;Enter two
strings:&quot; &lt;&lt; endl;</p>

<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>&nbsp;&nbsp;&nbsp; cin &gt;&gt; str1 &gt;&gt; str2;</p>



<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>&nbsp;&nbsp;&nbsp; //比较两个字符串</p>

<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>&nbsp;&nbsp;&nbsp; if (str1 &gt; str2)</p>

<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout
&lt;&lt; &quot;\&quot;&quot; &lt;&lt; str1 &lt;&lt; &quot;\&quot;&quot;
&lt;&lt; &quot; is bigger than &quot; </p>

<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt;
&quot;\&quot;&quot; &lt;&lt; str2 &lt;&lt; &quot;\&quot;&quot; &lt;&lt; endl;</p>

<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>&nbsp;&nbsp;&nbsp; else if (str1 &lt; str2)</p>

<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout
&lt;&lt; &quot;\&quot;&quot; &lt;&lt; str2 &lt;&lt; &quot;\&quot;&quot;
&lt;&lt; &quot; is bigger than &quot; </p>

<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&lt;
&quot;\&quot;&quot; &lt;&lt; str1 &lt;&lt; &quot;\&quot;&quot; &lt;&lt; endl;</p>

<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>&nbsp;&nbsp;&nbsp; else </p>

<p class=MsoNormal align=left style='text-align:left;line-height:9.0pt;
punctuation-trim:none;text-autospace:none'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cout
&lt;&lt; &quot;They are equal&quot; &lt;&lt; endl;</p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -