IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ Primer学习笔记(二) -> 正文阅读

[C++知识库]C++ Primer学习笔记(二)

第四章
1.使用声明语句创建数组: typename name[size];size必须是在编译时已知的,即不能是变量:变量的值实在运行的时候设置的。如果不初始化数组,那么数组中的值时不确定的。int total[500]={1}:第一个初始化位1,其余为0;
2.sizeof() 用于数组名返回数组的字节数,用于元素返回元素的字节数。
3.字符串:字符串可以存储在字符数组中,前提是数组最后的一个字符是‘\0’
4.在数组中使用字符串: char name1[size]=“c++cowBoy”; size不小于strlen(字符串)+1;strlen()只计算字符串可见的长度,末位还有’\0’;
5.通过字符数组输入字符串:cin当遇到空格时,确定字符串的结束位置。例如,输入: BiPeng FJNU,会被分为两个字符串,分别读取。
6.每次读取一行字符串:
(1)getline():
cin.getline(name,size);
用户输入的字符串长度应该不大于size-1,因为剩下的空间用于储存结尾的空字符。
(2)get():
get()和getline()接收的参数相同,和getline()不同的是,get()不再读取并舍弃换行符而是将其留在输入队列中。

cin.get(str1,size);
cin.get(str1,size);
经过上述操作str2的第一个字符会是回车符。所以需要在两句中间再加一个get()。
即:
cin.get(str1,size);
cin.get();
cin.get(str1,size);
或者:
cin,get(str1,size).get();
cin.get(str1,size);
同样的道理:cin.get(…).get(…)和连续调用两次cin.get()效果相同。

使用get()之前要检查输入队列中是否已经有回车符,如果有输入的将是空行。

7.ACII系统上’S’是83的另一种写法,而"S"表示字符串所在的内存地址.

8.当数据项使用两种或者更多中格式但不会同时使用时,用共用体union

9.枚举值如果没有显式定义,那么第一个默认为0,其他的为前面一个+1

10.枚举取值范围:上限大于这个枚举的最大值的最小的2的幂-1;下限:这个枚举最小值>0那么取值范围最小为0,如果最小值<0,那么取值范围最小为不大于最小值的2的幂(负)+1

11.声明和初始化指针:int ducks; int *birddog=&ducks 实际上是创建birddog变量,将ducks的地址存入其中

12.一定要在对指针应用接触引用运算符*之前,将指针初始化一个确定的适当的地址.

13.只能用delete来释放new分配的内存.对空指针使用delete是安全的

14.用new动态创建数组:int *psome=new int [10] 使用完后要用delete释放内存 delete [] psome;访问第i+1个元素,使用psome[i].

15.不是new分配的内存不能用delete释放;不要用delete释放同一块内存两次;如果用new来分配内存,应该使用delete来释放;只new不delete会造成内存的泄漏;对空指针delete是安全的。

16.c++将数组名解释为数组第一个元素的地址.
double wages[3]={1,1,1}
double * pw=wages
wages=&wages[0]表示数组第一个元素的地址

17.sizeof(): 应用于数组表示的是数组的长度(字节数),应用于指针表示指针的长度(字节数).

18.tacos[2] means (*tacos+2)

19.如果指针类型为 char* 那么cout显示其指向的字符串.如果要显示地址,需要将这个指针强制转换为别的类型的指针(如 int* )

20.使用strcpy(a,b)时,如果b比a的最大长度大,那么b剩余的字节会覆盖到数组a的后面的内存,可能会覆盖程序正在使用的其他内存。
此时应该使用 strncpy(a,b,strlen(a)-1),然后把a[length-1]赋值为’\0’

21.short tell[10] tell:数组名被解释为第一个元素的地址,&tell[0]同上;&tell被解释为这个数组的指针.

22.如果给cout提供一个字符的地址,则从该地址开始打印,直到遇到空字符. 在绝大多数c++表达式中,char数组名,char指针和引号括起来的字符串都被解释为字符串的第一个字符的地址.

23.将字符放到数组时,初始化数组时要使用 = 运算符,否则应该使用strcpy()或strncpy()

24.管理内存的方式:自动储存,静态储存,动态储存,(线程储存(c++11 新增))

(1)自动储存:函数内部定义的常规变量使用自动存储空间.所属函数被调用时,自动产生,函数结束时消亡,即内存被释放.
自动变量通常储存在栈中

(2)静态储存:整个程序执行期间都存在的存储方式.让变量成为静态的两种方式:在函数外定义它;声明变量时使用static

(3)动态储存:new和delete;它们管理了一个内存池,被称为自有储存空间或者,是和自动变量和静态变量所用的内存分开的.
new和delete可以让数据的生命周期不完全受程序或者函数的生存空间控制.相比使用常规变量可以让程序员对内存拥有更大的控制权.然而,在栈中,自动添加和自动删除使得内存总是连续的,而new和delete可能导致堆的内存不连续,使得追踪新分配内存的位置变得更难.

25.数组和array结构的长度是固定的,储存在栈中,vector长度是动态的,储存在堆中.可以将一个array对象赋值给另一个对象,数组必须一一赋值.

26.c++不会检查数组的超界错误,比如a[-2]:找到a指向的地址,向前移两个元素.而对于vector和arry,使用a.at(i)可在运行期间捕获非法索引.

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-25 12:01:58  更:2021-08-25 12:04:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 6:05:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计