C++ primer 一、二、三章

第一章 开始

课后习题及答案:
https://blog.csdn.net/qq_29762941/article/details/82658064

1.在main函数中return 0 和 return -1的区别

对程序执行来说,没有区别;0 和-1 最终以程序退出状态码返回,代表该程序执行是否有异常。
该问题可以延伸到main函数是如何被执行的:
fork()->execve()->_start启动例程->为main函数执行准备好argc、argv、envp等->调用main()->回到启动例程,执行exit(main函数的返回状态码)->exit()会执行一些退出函数,比如刷新,关闭文件描述符等操作。
参考:https://cloud.tencent.com/developer/article/1439033

2.std::cin, std::cout, printf, scanf的用法及实现

1)cin、cout头文件; printf、scanf头文件<stdio.h>
2) cin、scanf多个输入参数之间,用空格或enter键都可以,如果一个输入参数里包含空格,那么空格之后的内容会丢失;
3)用法参考:
https://www.cnblogs.com/MAX-ZMY/p/11540058.html
https://blog.csdn.net/weixin_44023525/article/details/84963597
4)实现:没找到

3.重定向标准输入、标准输出

< 文件名 重定向了标准输入;> 文件名 重定向了标准输出;
./程序名 < 文件名 > 文件名

第二章 变量和基本类型

1.基本内置类型

1)算术类型:字符、整型、布尔、浮点
char、wchar_t:
https://blog.csdn.net/freestyle4568world/article/details/49591739
https://blog.csdn.net/cwj649956781/article/details/15338129
2)整型、浮点型、单精度、双精度:
https://blog.csdn.net/zyhmz/article/details/57075473

3) 空类型:用于特殊场合,不对应具体的值,如return void

2.类型转换

https://www.jianshu.com/p/c678e5dab87e
猜测:编译器会将类型转换翻译成命令?

3.变量

1)声明和定义:
https://www.jianshu.com/p/92e81ecc8737
2)struct和数组的初始化为0的方法:
https://blog.csdn.net/wordwarwordwar/article/details/85001876

4.复合类型

1) 引用:别名;必须初始化,一旦与初始值绑定,不可解绑再重新赋值。不可赋空值。
https://blog.csdn.net/weixin_34240520/article/details/86403268

2)指针:指针本身就是对象,可以不初始化,但建议初始化,否则易引起运行时错误。
3)引用和指针的区别:
https://blog.csdn.net/u012611644/article/details/89055038
https://baijiahao.baidu.com/s?id=1624099009536720942&wfr=spider&for=pc
汇编代码:从汇编来看,引用是个常量指针,大小和指针一样大,是有内存空间的

    15: 	int x = 0;
008118AE C7 45 F8 00 00 00 00 mov         dword ptr [x],0  
    16: 	int& y = x;
008118B5 8D 45 F8             lea         eax,[x]  
008118B8 89 45 EC             mov         dword ptr [y],eax  
    17: 	int* z = &x;
008118BB 8D 45 F8             lea         eax,[x]  
008118BE 89 45 E0             mov         dword ptr [z],eax  
    18: 	y = 3;
008118C1 8B 45 EC             mov         eax,dword ptr [y]  
008118C4 C7 00 03 00 00 00    mov         dword ptr [eax],3  
    19: 	*z = 4;
008118CA 8B 45 E0             mov         eax,dword ptr [z]  
008118CD C7 00 04 00 00 00    mov         dword ptr [eax],4

dword 双字 就是四个字节 ptr pointer缩写 即指针 []里的数据是一个地址值,这个地址指向一个双字型数据
比如mov eax, dword ptr [12345678] 把内存地址12345678中的双字型(32位)数据赋给eax

5.const 限定符

顶层const\底层const
https://blog.csdn.net/jinsan0129/article/details/81907900

6.处理类型

1)typedef\using
2)auto\decltype
https://blog.csdn.net/wk_bjut_edu_cn/article/details/81951764
3)auto、decltype的区别
auto不仅推导了类型,还进行了初始化;而decltype只采用类型;
auto在推导数组的类型时,会将数组名转换为指针;而decltype不会;
auto在推导类型时,会忽略顶层const,而decltype不会;
加双层括号的decltype得到的类型永远是引用;
https://blog.csdn.net/chigusakawada/article/details/80071295

第三章 字符串、向量和数组

推荐使用!= 和 == 而不是<、>来做判断,因为C++的大多数容器都重载了!= 等,但没有重载<、>等。

1.using

1)命名空间的使用
2)起别名:using int_array = int[4];
(等同于C语言中的typedef int int_array[4] )

2.标准库类型string

1)string对象的初始化:直接初始化(用构造函数),拷贝初始化(用一个已有的对象来初始化)
2) string对象会自动忽略开头的空白(即空格符、换行符、制表符等)并从第一个真正的字符开始读起,直到遇见下一处空白位置

3) getline函数的参数是一个输入流和一个string对象,函数从给定的输入流中读入内容,直到遇到换行符为止(注意换行符也被读进来了),然后把所读的内容存入到那个string对象中去(注意不存换行符)。

3.C风格字符串

1)C语言中没有string类型,用char[]来存储字符串,因此string类型对应的>、+、等操作不适用于char[]
2)C语言中的字符串,应使用<string.h>中的字符串处理函数,strlen、strcmp,strcat,strcpy等。
3) 可以用C语言中的字符串初始化string类型,但不可用string类型来初始化C语言中的字符串,除非使用c_str()
在这里插入图片描述
在这里插入图片描述

4.标准库类型vector

1)欲使用vector,应先包含头文件
2) 定义和初始化vector对象,应注意()和 {}的区别:
在这里插入图片描述
3)注意vector的resize()和reserve()的区别:
https://www.cnblogs.com/qlee/archive/2011/05/16/2048026.html

5.数组

1)不允许拷贝和赋值。不能将数组的内容拷贝给其他数组作为初始值,也不能用数组为其他数组赋值。
在这里插入图片描述
2)使用数组名字的时候,编译器一般会把它转换成指针,因此定义数组的时候必须指定数据类型,不允许用auto关键字由初始值的列表推断类型。:
在这里插入图片描述
在这里插入图片描述
3)C++11使用于数组的标准库函数begin()和end()
在这里插入图片描述
4)可以用数组初始化vector,但不可用vector初始化数组:
在这里插入图片描述
5)多维数组
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值