用C++ Primer Plus复习C++系列之复合类型

用C++ Primer Plus复习C++系列

/*好长时间没有写博客了,最近忙科研任务的时候,发觉自己的基本功确实不行,慢慢地坚定了以后学习/求职路线是后台开发。我现在实力不够,菜的一批,但是以后要想靠这个吃饭,代码能力是绕不过去的,所以打算就在这里更新我的学习路线,反正也没人看,我也不怕人笑话hhh,就当记录自己的学习过程吧.*/

第四章:复合类型

  1. sizeof后面接数组名,返回整个数组中的字节数;而strlen()是返回数组中可见的字符串的长度。
  2. char定义的数组,数组结尾处是一个’\0’,作为char型数组的结尾标志。因此在确定存储字符串所需的最短数组时,不要忘了将结尾的空字符计算在内。
  3. 注意区分“字符串常量”和“字符常量”。字符串常量表示的是一种地址,跟指针知识联系起来,“s”不仅表示的是一个它所在的地址,还表示字符s和\0组合起来的字符串;字符常量可以理解为ASCII码。
  4. 在进行字符串输入的时候,cin有坑,它遇到空格、制表符和换行符会自动结束字符串的结束位置,并在末尾自动补上\0,所以当输入多个单词的时候,例如 ni hao ,cin会把中间的空格当做一种结束。此时应改用面向行输入的函数,getline()和get()。它俩的共同点是:都是遇到了换行符才结束输入。不同之处是,getline()遇到换行符之后将它替换成\0,而get()将换行符保留在输入序列中。而cin.get()函数可以理解为吸收掉这个换行符。在本章编程练习第八题时,这个知识点出的很巧妙,让我们先使用getline()输入某行内容再使用cin输入某个内容,这里有个大坑就是:当先使用完cin.getline()之后,按下换行符,这个换行符会留在输入队列中并被替换成’\0’这个结束符,导致后面再想输入东西时,由于输入队列已经结束了,因而无法再输入了。这个坑可用cin.get()解决,去吸收掉这个换行符。
  5. string类是数组这一章节重要内容,string类可以自动调整大小,也可以直接赋值、拼接和附加,而数组使用就很严格。string类中常见的两个函数:strcpy(char1,char2)--->copy char2 to char1;  strcat(char1,char2)-----> append contents of char2 to char1.  ps:数组的输入可采用 cin.getline(char,20)的方式,而string类的输入可采用getline(cin,str).
  6. 最重要的指针来了!!!指针是一个变量,存储的是值的地址。C++一般采用 int* p 的定义方式,int*是一种复合类型,可以理解为指向int的指针。
  7. new用来在运行阶段分配内存。格式为: typeName  * pointer_name = new typeName; 采用delete可以释放已经分配的内存。但是有两个重要准则:I. 不要释放已经释放过的内存块。 II. delete 只可以释放new方法分配的内存块。 new为大型数据分配内存更方便。在用new分配数组的时候,一般有[],那么在delete的时候,也应该写成delete [] xxx.
  8. c++中,数组名确实能当做指针来使用。但是两者的根本差别在于:指针是一种变量,可以修改值,eg: pr = pr+1,指针变量+1,增加的1是指它指向的类型的字节数。但是数组名是不能更改的。 ps: 数组的地址有个细节,int a[10];  cout<
  9. 在访问结构的成员的时候通常可用.(句点表示法)和->(箭头表示法),记住:如果结构标识符是结构名,则用句点;如果标识符是指向结构的指针,则使用箭头法。
  10. 数组的替代品有模板类vector和array.  vector的动态创建内存与释放与new/delete类似,但是这种工作是自动完成。#include,定义方法为vectorvt(n_elem),其中n_elem可以为0.即初始长度可为0.    array是c++11的模板类,与数组类似,长度固定,存储在栈里。#include  ,定义方法为arrayarr. 由于array固定长度,所以n_elem只能是常量不能是变量.

你可能感兴趣的:(C++,c++)