C++ Primer Plus 随记(第二、三、四章)

1.main() 函数 

程序入口,一般的可执行编程中必须存在且唯一的函数。在DLL(动态链接库)编程中可以不包含,但是调用DLL的程序一样需要 main() 函数。

2.名称空间 namespace

using namespace std;    // 这局代码配合 # include <iostream>  使用,相当于全局可用 名称空间 std 。

除此若存在自定义的名称空间,建议使用 std::cin 这类方式,避免不同命名空间的冲突。

 3.整形:short、int、long、long long

short至少16位;int至少和short一样长;long至少32位且至少和int一样长;long long至少64位且至少和long一样长。

4.字节定义

字节通常指8位的内存单元;

C++中的字节至少能实现容纳基本字符集的相邻位组成。即在基于ASCII和EBCDIC字符集的实现中,字节为8位;在基于Unicode字符集的实现中,字节可能为16位甚至32位。

5. cout 输出格式

cout<<hex;  //后续输出以16进制表示  cout<<dec;  //后续输出以10进制表示  cout<<oct;   //后续输出以8进制表示  (更改后一直有效)

cout<<setfill('*')<<setw(n)<<(目标);     //以 n 为最小域宽输出目标,空白字符用“*”填充,输出长度大于n时,无效。

setf(ios:fixed);  cout<<setprecision(2);//按两位小数输出数字(一直有效)   (不设置的话一般 cout 会省略浮点数最后的 0 导致结果显示位数不对)

cout<<setiosflags(ios::scientific);  // 以指数方式显示小数

6.浮点型:float、double、long double

float至少32位;double至少48位且不少于float;long double至少不少于double。一般分别为32、64、(80、96、128)。

浮点型的指数范围至少为 -37~37。    (2.34E+n) 表示为将 小数点向右移动 n 位;(2.34E-n) 表示为将 小数点向左移动 n 位。

浮点常量:后缀 f/F 表示float;后缀 l/L 表示long double;无后缀或指数形式表示 double。

浮点数不足示例:  float a=2.34e22; float b= a +1.0f;  cout << b-a;    按实际数据加减,其最终结果应为 1.0f ,在某些系统上结果为 0。由于系统的float表示为前6位或者前7位,实际修改的是第23位,结果不会收到 + 操作的影响。

7.类型转换

自动类型转换:   计算时会根据代码的具体实现进行自动转换(一般为类型提升),但是不合理的代码常会因此造成结果不和预知。

强制类型转换:(typename) value /   typename  (value)

从范围大的数据类型转换为类型小的数据类型:   超出取值范围

浮点型转换为整形:   小数部分丢失

8.数组索引越界

会导致预期之外的错误,因此代码中必须充分考虑访问数组是否越界。

9.字符串常量和字符常量的区别

'S' == 83   ;  "S" == ('S' 和'\0' 组成的字符串数组)    字符串数组以 '\0' 结尾(空字符)。

字符串拼接时会自动忽略前面字符串的末尾 '\0' 空字符。

10.按行输入字符串

cin.getline(name,size)  前size-1个字符存储到name数组中(最后一个用于存放空字符),不足用空字符补充。   

会自动丢弃换行符及超出指定大小的字符串。

空行问题:cin.getline(name,size) 遇到单个换行符占据一行会将目标数组设置为空数组

cin.get(name,size)  前size-1个字符存储到name数组中(最后一个用于存放空字符),不足用空字符补充。   

会将换行符保留在及超出指定大小的字符串输入序列中,用于后续读取。

连续读取单行,第二次及后续读取时访问到第一次遗留下来的换行符,默认获取到空字符串。  应使用cin.get(name,size).get()   用于去除输入序列中的换行符

前size个字符存储到name数组中,若改行的内容大于size个字符,剩余的字符不丢弃留到下一次输入使用。

空行问题:cin.get(name,size) 读取空行后,会设置失效位,后续的输入被阻断,使用cin.clear(); 来恢复正常输入

11.结构体

定义:

struct inflatable{

    char name[10];

    int age;

};

声明:struct inflatable boy;  inflatable boy;  C++中将结构体声明定义为一种新的类型,允许省略关键字 struct 定义结构体变量。

列表初始化;inflatable boy {"Bob",19};   inflatable boy={"Bob",19};  可缺省(=)号   也可缺省内容(全部字节置 零 ) inflatable boy {};

12.共用体

定义:

union one4all{

    int int_val;

    long long_val;

    double double_val;

}

声明&使用  one4all pail;  pail.int_val=15;  pail.long_val=1155; pail.double_val=2.34;    每次只能存储一个值(即多选一),长度为其最大成员的长度。

union中各成员共享一段内存空间,一个union的长度等于各成员中最长的长度。

union Data{
    struct { int x; int y} s;
    int x,y;
}d;

d 的长度等于struct  s的长度,为八字节(假设是32位),如图所示:

d.x,d.y以及d.s.x都是前四个字节,所以他们的值永远相等,

d.x=1;            ///d.x=d.y=d.s.x=1;

d.y=2;              ///d.x=d.y=d.s.x=2;

d.s.x=d.x*d.x;  ///d.x=d.y=d.s.x=2*2=4;

d.s.y=d.y*d.y; ///d.x=d.y=d.s.x=4+4=8;

13.枚举

定义:

enum spectrum {red,orange,yellow,green,blue,violet,indigo,ultraviolet};  声明了枚举变量   将 red ~ ultraviolet  定义为符号常量,代表数字 0~7    数值可以显示的指定数据用以覆盖。

14.指针

int *p1,p2;   // 创建了一个 int 指针变量 p1,和一个 int 变量 p2。

int *target[5]:指针数组,每个元素都是一个指向int*的指针;

int (*target)[5]:数组指针,相当于二维数组

注意:创建了指针变量后,在给指针变量赋值时  如:*p1=200; 需要将指针指向确定无风险的位置,避免指向代码区或者维持系统正常运行的区域。

new运算符 :  new 和 delete 搭配使用申请/释放 单个指针变量内存。使用 new[] 和 delete[] 搭配使用 申请/释放 动态数组的内存 。

指针和数组基本等价:指针算术和C++内部处理数组的方式--以变量类型所占内存大小作为基本操作单元;数组名--数组第一个变量的地址。

delete 释放已经释放内存后的内存会导致不可预期的错误。     delete可以对空指针使用,不可以释放非new申请的内存。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值