CPP_Basic_Summary_0.5

CPP_Basic_Summary_0.5

1、对于全局变量和局部静态变量,可不初始化赋值,系统默认为0;对于局部变量,如果没有赋初值,那么默认为随机值,如果立刻用于输入,则也可暂不初始化
2、for (初始化;循环测试;循环更新),三部分之间分号隔开,for ()是入口条件循环
3、初始化只执行一次,循环测试一般是关系表达式,默认强制转换为bool类型,结果非0为true,继续执行,否则为0(即false)跳出循环
4、函数调用和for ()的书写区别:函数后直接跟()没有空格,而for和()之间有空格,且一般循环体缩进书写
5、需要注意<<运算符的优先级比表达式中的运算符高时必须使用括号,如cout<<(x>3)<<endl;
6、通常cout在显示bool值前将其转换为int,也就是1和0;但是可以使用cout.setf(ios_base::boolalpha);语句修复强制显示true和false
7、判定部分自增自减表达式的时候,很容易有副作用,也就是判定时会导致表达式值发生变化,比如:判定 ++x+15 就会导致副作用
8、表达式到语句只需要添加分号即可,但是反之却不正确;for循环不是表达式,因此没有值,也不能给它赋值
9、for ()循环中声明的变量仅仅只在该循环内有效,离开循环变量即消失
10、i<=ArSize-1这样的表达应该修改为i<ArSize代码可读性和效率更好
11、名称空间不仅可以using namespace std这样的编译指令;还可以使用using std::cout;这样声明的方式,(参考P5.5)
12、关于顺序点:任何一个完整的表达式末尾都是一个顺序点
13、对于内置类型,前缀格式和后缀格式效率无差别,但是对于类和自定义而言,前缀版本效率比后缀版本高。示例:++i和i++
14、前缀和解除引用运算符的优先级相同,从右向左结合;后缀运算符优先级相同,但比前缀运算符的优先级高,并从左到右结合。如:++pt的含义:(++pt);可参考P136
15、组合赋值运算符:+= -= = /= %=这些都必须保证左边的操作数可被赋值
16、循环体可使用复合语句{},注意结尾处没有分号,可写入多条语句,且语句块中定义的变量在执行完该语句块后会被释放;另外全局被定义的变量在语句块可以再次定义,但是新的定义只在语句块内有效,结束块后,变量值再次恢复到最初定义的全局变量值。
17、逗号运算符可将两个表达式合为一个,且它是一个顺序点,优先级最低。此外,C++规定:逗号表达式的值是第二部分的值。比如i=20,j=2
i中,表达式的值为40;又比如cats=17,240中,被解释为(cats=17),240,所以cats被设置为17,240不起作用;再比如cats=(17,240),将把cats设置为240,即逗号右侧的表达式值
18、务必注意区分赋值运算符=和等于运算符==,两者使用错误会造成严重后果(死循环崩溃);因为一旦将非零值赋给表达式,将导致表达式始终为true(非0),进入死循环,且内存会溢出;故此,比较相等应该使用==而不是=
19、注意,若word是数组名,则诸如word=="mate"的表达式是无效的,始终为false,因为这个表达式两端都是地址,所以并非判断两个字符串是否相同,而是查看他们是否存储在相同的地址上,因此显然是否定(false)的。对于字符串的比较,应该使用#include <cstring>中strcmp()函数比较,如:strcmp(word,"mate");作为测试条件才能加入循环
20、对于19提到不能用来比较字符串,但是却可以用来比较字符,如ch<='a';此外若word不是数组m名而是string对象,则可以使用诸如:word!=“mate”这样的关系表达式
21、strcmp()检测字符串相等以及排序:
str1和str2相等:表达式: strcmp(str1,str2)==0 为true
str1和str2不等:表达式: strcmp(str1,str2)!=0或者直接strcmp(str1,str2) 为true
str1在str2前面:表达式: strcmp(str1,str2)<0 为true
str1在str2后面:表达式: strcmp(str1,str2)>0 为true
22、另外可以使用数组索引来修改字符串中的字符,十分方便
23、while是没有初始化和循环更新的for循环,只有循环测试条件和循环体;和for一样条件为true时继续循环,false跳出,同样支持语句块,也是一种入口条件循环,它们本质相同

while (测试条件)
{
    循环体;
    更新测试条件;
}

24、不同于C风格字符串,string对象不使用"\0"空字符来标记字符串结尾
25、for和while等效,但是有以下区别:首先是for中省略测试条件将认为条件为true;其次for中可以声明初始化一个局部变量,但是while不行。一般计数循环用for,无法预知循环次数时使用while
26、C++中可使用clock()函数设计延时,以系统时间单位为单位计算延迟时间可以有效避免在每轮循环中将系统时间转换为秒
27、C++中建立类型别名可用以下两种方法:第一种,预处理器法:#define byte char,用char来取代byte;第二种,关键字法:typedef char byte,使byte成为char的别名。typedef不会创建新类型,只会给已有类型建立一个新名称而已
28、do while循环是出口条件循环,至少执行一次,且表达式为true时继续执行,false跳出循环,这种循环很适合设计需要先获得输入作为条件测试的程序

do
{
    循环执行体;
}
while (测试出口条件)

29、C++11基于范围的for循环:

double prices[5] {4.99,10.34,12.45,8.24,6.23}
for (double x:prices)
    cout<<x<<endl;

该循环将从第一个元素开始逐个显示全部值
30、原始的cin输入将会忽略空格和换行符,可采用cin.get(char)补救,这将允许读取空格和换行符。此外,cin.get(name,ArSize)可用于数组,这些不同的实现方式称为C++函数重载
31、文件尾条件EOF:检测到EOF后,cin将eofbit和failbit都设置为1,可通过eof()和fail()来分别查看对应值,检测到EOF则返回true。它们都属于事后报告而不是预先报告;其中fail()可用于更多实现
32、while(cin)比!cin.fail()和!cin,eof()更通用,因为还可以检测到其它如磁盘故障
33、不接受任何参数的cin.get()成员函数返回输入中的下一个字符,所以可以写:
ch=cin.get()这样的方式读取
34、一般不需要知道EOF的实际值,但是通常EOF被定义为-1,平时只需要使用即可;另外,EOF并不表示输入中的字符,而是指出没有字符
35、如果将ch的类型声明为int,而不是char,则必须在显示ch时将其强制转换为char类型,如:
cout.put(char(ch));
36、对于cin.get()和cin.get(char),应该首先使用后者,因为更符合对象方式,比如下面的示例将输入的下一个字符读入ch1,将接下来一个字符读入ch2:
cin.get(ch1).get(ch2);
37、从存储空间的角度出发,使用指针数组更为经济,但是如果要修改其中任何一个字符串,则2D数组是更好的选择;2D数组适合用循环嵌套进行处理。

const char* Month[Monthx]//定义指针数组
    {   "January", "February","March","April",
           "May","June","July","August","September",
           "October","November","December"
    };
int Books_sales [years][Monthx] {};
    //定义N年各月销售数据2D数组
for (int i=1;i<(years+1);i++)//循环嵌套
{
      cout<<"Please enter sales of no."<<i<<" year ";
      for (int j=0;j<Monthx;j++)
      {
            cout<<Month[j]<<": ";
            cin>>Books_sales[i][j];//分别存入2D数组
      }
}

38、还可以使用string对象数组:

string cities[number]
{
    "something",
    "something",
    "something"
}

若希望字符串可修改的情况下,string比2D数组方便

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容