C++Primer第5章

合集下载

《C++PrimerPlus(第六版)》(7)(第五章循环和关系表达式答案)

《C++PrimerPlus(第六版)》(7)(第五章循环和关系表达式答案)

《C++PrimerPlus(第六版)》(7)(第五章循环和关系表达式答案)5.8 复习题1.⼊⼝条件就是在进⼊循环的时候就检测,出⼝条件是先进⼊循环,再检测,⾄少可以执⾏⼀次循环。

for、while属于⼊⼝条件检测,do while属于出⼝条件检测。

2.01234int i;for (i = 0; i < 5; i++)cout << i;cout << endl;3.036912int j;for (j = 0; j < 11; j += 3)cout << j;cout << endl << j << endl;4.68int j = 5;while (++j < 9){cout << j++ << endl;}5.k = 8int k = 8;docout << "k = " << k << endl;while (k++ < 5);6.for (int i = 1; i <= 64; i *= 2){cout << i<<" ";}cout << endl;7.使⽤{},其实就算只有⼀条语句,也应该使⽤{},可以是代码更加清晰,⽽且说不定什么时候需求就要变了,⼀条语句通常⼲不了什么的。

8.都有效。

int x = (1, 024);//x为20,()内返回024,0开头是8进制,即是20.int y;y = 1, 024;//y=1,之后024.就没了9.cin>>ch,跳过空格、换⾏符、制表符。

cin.get(ch) 和 ch = cin.get()可以读取这些字符5.9编程题1.int m = 0;int n = 0;cin >> m;cin >> n;if (m > n) {int t = m;m = n;n = t;}int total = 0;for (int i = m; i <= n; i++) {total += i;}cout << total <<endl;2.5.4程序清单const int ArSize = 16;long long factorials[ArSize];factorials[1] = factorials[0] = 1LL;for (int i = 2; i < ArSize; i++) {factorials[i] = i * factorials[i-1];}for (int i = 0; i < ArSize; i++) {cout << i << " = " << factorials[i] << endl;}修改后:const int ArSize = 101;array<long double, ArSize> factorials;factorials[1] = factorials[0] = 1;for (int i = 2; i < ArSize; i++) {factorials[i] = i * factorials[i-1];}for (int i = 0; i < ArSize; i++) {cout << i << " = " << factorials[i] << endl;}结果:0 = 11 = 12 = 23 = 64 = 245 = 1206 = 7207 = 50408 = 403209 = 36288010 = 3.6288e+0611 = 3.99168e+0712 = 4.79002e+0813 = 6.22702e+0914 = 8.71783e+1015 = 1.30767e+12。

《C Primer Plus》(Fifth Edition)编程练习参考答案 第五章

《C Primer Plus》(Fifth Edition)编程练习参考答案 第五章

第5章运算符、表达式和语句编程练习1.编写一个程序。

将用分钟表示的时间转换成以小时和分钟表示的时间。

使用#define或者const来创建一个代表60的符号常量。

使用while循环来允许用户重复键入值,并且当键入一个小于等于0的时间时终止循环。

#include<stdio.h>#define HOUR 60int main(void){int minutes;printf("Please input the minutes:");scanf("%d",&minutes);while(minutes>0){printf("%d hours and %d minutes\n",minutes/HOUR,minutes%HOUR);printf("Please input the minutes:");scanf("%d",&minutes);}return(0);}2.编写一个程序,此程序要求输入一整数,然后打印出从(包括)输入的值到(包括)比输入的值大10的所有整数值(也就是说,如果输入为5,那么输出就从5到15)。

要求在各个输出值之间用空格、制表符或换行符分开。

#include<stdio.h>int main(void){int num,i=0;printf("Please input the number:");scanf("%d",&num);while(i++<11)printf("%d ",num++);}return(0);}3.编写一个程序,该程序要求用户输入天数,然后将该值转换为周数和天数。

例如,此程序将把18天转换成2周4天。

用下面的格式显示结果:使用一个while循环让用户重复输入天数;当用户输入一个非正数(如0或-20)时,程序将终止循环。

C-primer-plus(第五版)(完整)

C-primer-plus(第五版)(完整)

C_primer_plus(第五版)(完整)@第一章概览编程练习1.您刚刚被MacroMuscle有限公司(Software for Hard Bodies)聘用。

该公司要进入欧洲市场,需要一个将英寸转换为厘米(1英寸=2.54 cm)的程序。

他们希望建立的该程序可提示用户输入英寸值。

您的工作是定义程序目标并设计该程序(编程过程的第1步和第2步)。

1.将英寸值转化为厘米值2.显示“输入英寸值”->得到该值->转换为厘米值->存储->告知用户已结束第二章 C语言概述编程练习1.编写一个程序,调用printf()函数在一行上输出您的名和姓,再调用一次printf()函数在两个单独的行上输出您的名和姓,然后调用一对printf()函数在一行上输出您的名和姓。

输出应如下所示(当然里面要换成您的姓名):Anton BrucknerAntonBrucknerAnton Bruckner第一个输出语句第二个输出语句仍然是第二个输出语句第三个和第四个输出语句#include<stdio.h>int main(void){printf("He Jin\n");printf("He\n");printf("Jin\n");printf("He Jin\n");return(0);}2.编写一个程序输出您的姓名及地址。

#include<stdio.h>int main(void) //此处不可加;{printf("Name:He Jin\n");printf("Address:CAUC\n");return(0);}3.编写一个程序,把您的年龄转换成天数并显示二者的值。

不用考虑平年( fractional year)和闰年(leapyear)的问题。

#include<stdio.h>int main(void){int age=22;printf("Age:%d\n",age);printf("Day:%d\n",age*356);return(0);}4.编写一个能够产生下面输出的程序:For he's a jolly good fellow!For he's a jolly good fellow!For he's a jolly good fellow!Which nobody can deny!程序中除了main()函数之外,要使用两个用户定义的函数:一个用于把上面的夸奖消息输出一次:另一个用于把最后一行输出一次。

C Primer习题集(第5版)

C   Primer习题集(第5版)

谢谢观看
读书笔记
读书笔记
第一次如此真切的觉得推荐算法是方便人生活的,而不是搭信息茧房。
目录分析
第1章开始
内容简介
第2章变量和基本 类型
第4章表达式
第3章字符串、向 量和数组
第5章语句
第6章函数 第7章类
第8章 IO库 第9章顺序容器
第11章关联容器
第10章泛算法
第12章动态内存
第13章拷贝控制
C++ Primer习题集(第5版)
读书笔记模板
01 思维导图
03 读书笔记 05 作者介绍
目录
02 内容摘要 04 目录分析 06 精彩摘录
思维导图
本书关键字分析思维导图
第版
编程
参考书
指南
模板
第章
拷贝
第版
习题
版 容器
面向对象
习题
设施
程序
向量
类型
标准库
变量
内容摘要
内容摘要
C++ Primer(Fifth Edition)由三位C++大师Stanley B. Lippman、Josée Lajoie和Barbara E. Moo 合作完成,其中文译本《C++ Primer中文版(第5版)》也已出版。与上一版相比,这一版基于C++11标准进行了 全面而彻底的内容更新;既是初学者的最佳指南,也是中高级程序员不可或缺的参考书。本书作为这部久负盛名 的C++经典教程的配套习题解答,提供了C++ Primer(Fifth Edition)中英文版图书中所有习题的参考答案。 本书对使用C++ Primer(Fifth Edition)学习C++程序设计语言的读者来说是一本非常理想的参考书。

《C++ Primer》5第五部分学习笔记汇总_高级主题(17章至18章)

《C++ Primer》5第五部分学习笔记汇总_高级主题(17章至18章)

《C++ Primer》第五部分学习笔记汇总——高级主题《C++ Primer》第17章学习笔记第17章:用于大型程序的工具——异常处理,命名空间,多重继承与虚继承@学习摘录204:概念——大规模编程对程序设计语言的要求往往比小程序员团队更高。

——1. 更严格的正常运转时间以及更健壮的错误检测和错误处理。

——2. 能够用各种库(可能包含独立开发的库)构造程序。

——3. 能够处理更复杂的应用概念。

第一节:异常处理@学习摘录205:异常处理的作用——通过异常我们能够将问题的检测和问题的解决分离,这样程序的问题检测部分可以不必了解如何处理问题。

@学习摘录206:抛出类型的异常——异常是通过抛出(throw)对象而引发(raise)的。

被选中的处理代码是调用链中与该对象类型匹配且离抛出异常位置最近的那个。

——执行throw的时候,不会执行跟在throw后面的语句,而是将控制从throw转移到匹配的catch.@学习摘录207:被抛出的对象——被抛出的对象将会自动转换为一个指针,不存在数组或函数类型的异常。

——如果抛出一个数组,被抛出的对象转换为指向数组首元素的指针。

——如果抛出一个函数,函数被转换为指向该函数的指针。

@学习摘录208:异常对象——在处理异常的时候,抛出异常的块中的局部存储不存在了。

——因为在处理异常的时候会释放局部存储,所以被抛出的对象就不能再局部存储了,而是用throw表达式初始化一个称为异常对象的特殊对象。

——异常对象将传给对应的catch,并且在完全处理了异常之后撤销。

——当抛出一个表达式的时候,被抛出对象的解态编译时类型将决定异常对象的类型。

@学习摘录209:异常与指针——用抛出表达式抛出静态类型时,比较麻烦的一种情况是,在抛出中对指针解引用。

——抛出指针的时候,必须确定进入处理代码时指针所指向的对象存在。

——如果抛出指向局部对象的指针,而且处理代码在另一函数中,则执行处理代码时指针所指向的对象将不再存在。

C++ Primer 4th 第五章答案

C++ Primer 4th 第五章答案

编写while 循环条件从标准输入设备读入整型(int)数据,当读入值为42 时循 环结束。 【解答】 int val; cin >> val; while (val != 42) 或者,while 循环条件也可以写成 while (cin >> ival && ival != 42) 习题5.8 编写表达式判断4 个值a、b、c 和d 是否满足a 大于b、b 大于c 而且c 大于d 的条件。 【解答】 表达式如下: a > b && b > c && c > d 习题5.9 假设有下面两个定义: unsigned long ul1 =3, ul2 = 7; 下列表达式的结果是什么? (a) ul1 & ul2 (b) ul1 && ul2 (c) ul1 | ul2 (d) ul1 || ul2 【解答】 各表达式的结果分别为3、true、7、true。 习题 5.10 重写bitset 表达式:使用下标操作符对测验结果进行置位(置1)和复位(置 0)。 【解答】 bitset<30> bitset_quiz1; bitset_quiz1[27] = 1; bitset_quiz1[27] = 0; 习题5.11 请问每次赋值操作完成后,i 和d 的值分别是多少? int i; double d; d = i = 3.5; i = d = 3.5; 【解答】 赋值语句d=i=3.5;完成后,i 和d 的值均为3。因为赋值操作具有右结合性,所以首先将3.5 赋给 i(此时发生隐式类型转换,将double 型字面值3.5 转换为int 型值3,赋给i),然后将表达式 i=3.5 的值(即赋值后i 所具有的值3)赋给d。赋值语句 i=d=3.5;完成后,d 的值为3.5,i 的 值为3。因为先将字面值3.5 赋给d,然后将表达式d=3.5 的值(即赋值后d 所具有的值3.5)赋给 i(这时也同样发生隐式类型转换)。 习题 5.12 解释每个if 条件判断产生什么结果? if ( 42 = i ) // ... if ( i = 42 ) // ... 【解答】 前者发生语法错误, 因为其条件表达式42=i 是一个赋值表达式, 赋值操作符的左操作数必须为一 个左值,而字面值42 不能作为左值使用。 后者代码合法,但其条件表达式i=42 是一个永真式(即其逻辑值在任何情况下都为true),因为

C语言程序设计教程 第五章 课后习题参考答案

C语言程序设计教程 第五章 课后习题参考答案
printf("%d\t",f);
k++;
if(k%5==0)
printf("\n");
f1=f2;
f2=f;
}
printf("\n");
return 0;
}
P124 3统计一个整数的位数
#include<stdio.h>
int main()
{
int n,k=0;
printf("请输入n的值:");
int main()
{
int x,y,z,i=0;
for(x=1;x<=20;x++)
{
for(y=1;y<=33;y++)
{
for(z=3;z<=99;z=z+3)
{
if((5*x+3*y+z/3==100)&&(x+y+z==100))
i++;
}
}
}
printf("共有%d种买法:\n",i);
c语言程序设计教程第五章课后习题参考答案
P1242古典问题:兔子总数(斐波那契数列)
#include<stdio.h>
int main()
{
int f1=1,f2=1,f,i,k=0;
printf("%d\t %d\t",f1,f2);
k=k+2;
for(i=3;i<=20;i++)
{
f=f1+f2;
do
{
printf("请输入第%d个整数x=",i);

cprimerplus第六版第五章习题答案

cprimerplus第六版第五章习题答案

//1/*#include<iostream>using namespace std;int main(){cout << "请输入一个较小的整数:";int min;cin >> min;cout << "请输入一个较大的整数:";int max;cin >> max;int he=0;for (int i = min; i <= max; i++)he = i + he;cout << "这两个数之间所有数相加后的和为:" << he<<endl;system("pause");return 0;}*///2/*#include<iostream>#include<array>using namespace std;const int Arsize = 101;int main(){array<double, Arsize> aa ;aa[1] = aa[0] = 1;for (int i = 2; i < Arsize; i++)aa[i] = i*aa[i - 1];for (int i = 0; i < Arsize; i++)cout << i << "!=" << aa[i] << endl;system("pause");return 0;}*///3/*#include<iostream>using namespace std;int main(){cout << "请输入一个数字" << endl;int m=0, n;do{cin >> n;m = m + n;cout << "累计输入数字的和为:" << m << endl;}while (n != 0);system("pause");return 0;}*///4/*#include<iostream>using namespace std;int main(){double daphne = 110, cleo = 105;int i;for (i = 1; daphne > cleo; i++){daphne += 10;cleo *= 1.05;}cout << i << endl << daphne << endl << cleo;system("pause");return 0;}*///5/*#include<iostream>#include<string>using namespace std;int main(){const int Month=12;const int Number=12;const string month[Month] ={"January" ,"February","March","April","May","June","July","August","September","October","November","December",};int number[Number];int he=0;for (int i = 0; i < Month; i++){cout << month[i];cin >> number[i];he += number[i];}for (int i = 0; i < Month; i++){cout << month[i] << "\t";cout << number[i] << "\t";}cout << "和为:" << he;system("pause");return 0;}*///6/*#include<iostream>#include<string>using namespace std;int main()const int Month = 12;const int Year = 3;int number[Year][Month];string y[Year] = { "first","second","third" }; int he[Year] = {0,0,0};int h=0;cout << "请输入每个月的销量" << endl;for (int year = 0; year < Year; year++){cout << y[year] << "\t";for (int month = 0; month < Month; month++) {cin >> number[year][month];he[year] += number[year][month];cout << "\t";}h =h+ he[year];cout << he[year];cout << endl;}cout << h;system("pause");return 0;//7/*#include<iostream>#include<string>using namespace std;struct car{string name;int year;};int main(){int n;cout << "How many cars do you wish to catalog?";cin >> n;cin.get();car *p = new car[n];for (int i = 0; i < n; i++){cout << "Car #" << i + 1 << ":" << endl;cout << "Please enter the make:";getline(cin,p[i].name);cout << "Please enter the your made:";cin >> p[i].year;cin.get();}cout << "Here is your collection:" << endl;for (int i = 0; i < n; i++)cout << p[i].year << p[i].name << endl;system("pause");}*///8/*#include<iostream>#include<cstring>using namespace std;int main(){char word[20];int i=0;cin >> word;while (strcmp(word, "done") != 0){i++;cin >> word;}cout << i;system("pause");}*///9/*#include<iostream>#include<string>using namespace std;int main(){string word;int i = 0;cin >> word;while (word!="done"){i++;cin >> word;}cout << i;system("pause");}*///10#include<iostream>using namespace std;int main(){int row;char point = '.', star = '*';cout << "Enter number of rows: ";cin >> row;for (int m = 1; m <= row; m++){int n;for (n = 1; row - n >= m; n++){cout << point;}for (n; n <=row; n++){cout << star;}cout << endl;}system("pause");}.。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1. C++提供了丰富的操作符,并定义了对于内置操作数的这些操作符的含义。

并且,C++支持操作符重载。

允许程序员自定义用于类类型的操作符含义。

标准库正是使用重载来定义用于库类型的操作符的。

本章重点介绍C++定义的操作符。

它无使用内置类型的操作数。

另外,还介绍一些标准库定义的操作。

本章其实是C++中基本的操作。

我无的学习,不仅要学习与C语言的区别,更主要的是理解一些库操作符。

以及C++在面向对象方面所作的改进。

2.一个表达式由多个操作数通过操作符组合而成。

操作数我无以前学过。

操作符是可有可无的。

每个表达式都会产生一个结果。

若表达式中无操作符,则结果是操作数本身。

若有表达式,其值通过对操作数作指定操作而获得。

表达式的结果是右值。

可读取,但不能赋值。

操作符表示该操作符执行什么操作及操作结果的类型,这取决于操作数的类型。

除非已知操作数的类型,否则无法确下表达式的含义。

例:i+j=?可能是两个字符串相加,也可能是两个数相加。

取决于操作数的类型。

一元,二元,三元操作符:有几个操作数义称为几元操作符。

操作符对其操作数的类型有要求。

如果操作符应用于内置或复合类型,由C++定义其类型要求。

这也是我无主要要学习的内容。

对于类类型,要由类的定义者通过操作行重载的方式定义操作符的操作。

对于内置类型操作数的二元操作符,通党要求它的两个操作数具有相同的数据类型。

或者其类型可以转同一种数据类型。

3. 算术操作符可用于任意算术类型或可转换为算术类型的数据类型。

其优先级由上往下排。

高优先级的顺序操作符要比低优先级的结合更紧密。

都是左结合,即,当优先级相同时,从左向右依次与操作数结合。

一元负号及一元正号对于操作数取正或取负值操作。

4. 设某位机器的short为16位。

能表示的最大值为32767.上例中,相加后的结果是32768.这个有符号数需要17位存储空间。

但这里只有16位数。

于是导致了溢出现象的发生。

许多系统都不会给出编译时或运行时警告。

对于不同机器,上式的值不尽相同。

有可能是堆断后得到-327686.关系和逻辑操作符使用算术或指针类型操作数并返回bool类型的值。

按优先级顺序排列如下。

7.逻辑与和逻辑或操作符总是先计算其左操作数,然后再计算其右操作数。

只有当左操作数的值无法确定逻辑表达式的结果时,才会求解右操作数。

我们将这种求值策略称为短路求值。

对于逻辑与操作符,一个很有价值的用法是,如果某边界条件使exp2的计算变得危险,则应在该条件出现之前,先让exp1的计算结果为false. 上述程序是将句子的第一个单词变在大写。

在while中判断两个条件,首先,检查it是否如果已到达结尾。

如果不是,则it 肯定指向s中的一个字符。

只有当该条件成立时,系统才会计算逻辑与操作的右操作数。

即保证it确实指向一个真正的字符后,才检查它是否为空格。

9. 只要k大于1,上式结果为true.11. 位操作符应用整型数做操作数。

将其视为二进制位的集合,为每一位提供检验和设置的功能。

还可用于bitset类型的的操作数。

语法规定位操作符的整数类型可以是有符号的也可以是无符号的。

但如果操作数为负数,则位操作符如何处理其符号位依赖于机器。

它们的应用可能不同,在一个应用环境中实现的程序可能无法应用于另一个应用环境。

对于12.左移或右移时会丢弃移出去的位。

给左右两边插入0.对于右移操作,如果其操作数是无符号的,则从左边开始插入0.如果操作数是有符号的,则插入符号位的副本或0.如何选择依据具体实现。

移位操作的右操作数不可以是负数,而且必须是严格小于左操作数位数的值。

否则操作结果未定义。

常犯的错误是位与与逻辑与,位或与逻辑或相混淆。

14. Bitset类比整型值上的低级位操作更容易使用。

设某班30个学生,测验,及格用1不及格为0.对每个学生用一个二进制位来记录一次测验的结果。

可用bist类型或整型值来代表一次测验结果。

上述定义中,bitset每一位都默认为0.整形一定要用unsigned long。

因为它可保证在任何机器上都至少有32位长度。

设第27号学生及格了。

操作分别如下:用bitset实现时,可直接传递要置位的位给set函数。

用unsigned long实现时,就比较复杂。

|=是一个复合赋值操作符。

若老师重新复查成绩,发现第27号学生实际上是不及格的。

则用以下方式修改。

也可用以下方式获知第27号同学是否及格。

一般而言,标准库提供的bitset操作更直接、更容易阅读和书写。

正确使用的可能性更高。

而且,bitset对象的大小不受unsigned数的位数限制。

通常来说,bitset优于敕型数据的低级直接位操作。

15.标准IO库重载了位操作符>>和<<用于输入和输出。

重载的操作符与该操作符的内置类型版本具有相同的优先级和结合性。

最后一句的含义是:将10写到cout,然后用此操作的结果即cout与42做比较。

16.赋值表达式的值是其左操作数的值,其结果的类型为左操作数的类型。

赋值时,当左、右操作数的类型不同时,有可能通过隐式类型转换修改被赋的值。

因此,存放在左、右操作数中的值并不相同。

J最后一个赋值语句中,ival的值与右操作数的值不相同。

17.在多个赋值操作中,各对象必须具有相同的数据类型,或具有可转换为同一类型的数据类。

18.另一种常见的作法是将赋值操作写在条件表达式中。

这样可缩短程序代码并阐明程序员的意较长。

上例中循环调用get_value函数,设它返回int值,通过循环检查这些返回值,直到荼得所需值为止。

它可简化为:但是下面的程序更能清晰地表达程序员的意较长:持续循环直到get_value的值为42为止。

要注意的是,在赋值操作上加圆括号是必须的。

因为赋值操作符的优先级低于不等操作符。

若没有圆括号,则先比较get_value的返回值和42是否相等,然后将比较的结果true或false即1或0赋给i.这显然不是我们想要的。

另一种容易出现的错误是混淆相等操作符和赋值操作符。

前面一个对于if语句的判断总为true.这类错误往往难以发现,但会导致程序执行时得不到想要的结果。

19. 我们常在对某个对象做某种操作后,再将操作的结果重新赋给该对象。

为此,C++提供了复合赋值操作符。

虽然运算结果等价。

但还是有差另的。

在使用复合赋值操作时,左操作数只计算了一次,而使用相似的长表达式时,该操作数计算了两次。

第一次作为右操作数,第二次作为左操作数。

复合赋值的性能比一般好。

若不考虑性能因素,在很多上下文环境中这两个是相似的。

20.++和- -被称为自增和自减操作符。

它为对象加1或减1操作提供了方便简短的实现方式。

建议使用前自增。

因为前置操作需要做的工作更少,它只需要加1后返回加1后的结果。

后自增操作则必须先何存操作数原来的值,以便在结束后返回未加1之前的值作为操作结果。

对于int型对象和指针,编译器可优化掉这项额外工作。

但对于更多的复杂迭代器类型,这种额外工作可能会花费更大的代价。

因此,养成使用前置操作这个好习惯,就不必操心性能差异的问题。

22. 点操作符用于获取类类型对象的成员。

若有一个指向Sales_itme对象的指针,在使用点操作符前,需要对该指针进行解引用。

这里,对sp进行解引用以获得指定的Sales_item对象。

然后使用点操作符调用指定对象的成员函数。

注意必须用圆括号把解引用括起来。

因为点操作符的优先级高于解引用。

若漏掉圆括号,则含义完全不同。

由于sp是没有成员的指针。

所以会出错。

由于编程时很容易忘记圆括号,而这类代码又经常使用,所以C++为在点操作符后使用解引用操作定义了一个同义词:箭头操作符。

设p为指向类类型对象的指针。

Same_isbn可重写为:23. 是唯一的三元操作符。

它允许将简单的if-else判断语句嵌入到表达式中。

首先计算条件判断表达式cond的值。

如果cond为0,则计算expr2,为非0,则计算exper1. 与逻辑与,逻辑或操作符一样,条件操作符保证了上述操作数的求解次序。

由于条件操作符的优先级相当低。

当我们要在一个更大的表达式中嵌入条件表达式时,通常必须用圆括号把条件表达式括起来。

否则会有意外的结果24. 第二个将i和j的结果视为<<操作符的操作数。

输出1或0.<<输出cout值,然后将返回结果cout作为条件操作符的判断条件。

25. Sizeof表达式的结果是编译时常量。

有以下三种语法形式:将sizeof用在表达式expr上,将获得该表达式的结果的类型长度。

将sizeof用于表达式时,并没有计算表达式的值。

在sizeof *P中,指针p可以持一个无效地址。

因为不需要对p做解引用扣作。

26. 因为sizeof返回整个数组在内存中的存储长度,所以用sizeof数组的结果除以sizeof其元素类型的结果,即可求出数组元素的个数。

设ia为一数组,28. 含有两个或更多操作符的表达式称为复合表达式。

其中操作数和操作符的结合方式决定了整个靛达式的值。

这取决于操作符的优先级和结合性。

若不想考虑优先级和结合性,则可用圆括号强制实现某个特殊分组。

P14729. 以什么次序求解操作数通常没有多大关系。

只有当操作符的两个操作数涉及到同一个对象,并改变其值时,计算次序才会影响结果。

如果一个子表达式修改了另一个子表达式的操作数,则操作数的求解次序就变得相当重要了。

<操作符的左右操作数都使用了index变量。

但是左操作数更改了该变量。

这类表达式的行为没有明确定义。

30. 一个表达式里,不要在两个或更多的子表达式中对同一对象做自增或自减操作。

31. New和delete不仅可以动态创建和释放数组,也可用于动态创建和释放单个对象。

定义变量时,必须指定其数据类型和名字。

动态创建对象时,只需指定其数据类型,不必为该对象命名。

New返回指向新创建对象的指针。

我们通过该指针来访问此对象。

该对象在自由存储区中分配创建了一个整型对象,并返回此对象的地址。

并用该地址初始化指针pi.提供了初值后,new表达式分配到所需要的内存后,用给定的初值初始化该内存空间。

32.如果不提供显式初始化,动态创建对象与在函数内定义的变量初始化方式相同。

程序员可以通过在类型名后面使用一对内容为空的圆括号对动态创建的对象做值初始化。

内容为空的圆括号表示虽然要做初始化,但实际上并未提供特定的初值。

对于提供了默认构造函数的类类型,没有必要对其对象进行值初始化。

无论程序是明确地不初始化还是进行值初始化,都会调用其默认构造函数初化。

对于内置类型或没有定义默认构造函数的类类型,采用不同初始化方式是有显著的差别的。

33.值初始化的()必须置于类型名后面,而不是变量后面。

34.delete释放指针所指向的地址空间。

如果指针指向的不是new分配的内存地址,则在该指针上使用delete是不合法的。

相关文档
最新文档