C++学习笔记4 - 符合类型
来源:互联网 发布:数控车图纸编程 编辑:程序博客网 时间:2024/06/05 02:14
《C++ Primer Plus 第6版》读书笔记
知识点:
1.C++数组初始化 可以省略“=”
int lift[10] {1, 2, 4}; 等价 int lift[10] = {1, 2, 4};
int lift[10] {}; //等于 {0}
2.'S' 是83的另一种写法。“S” 表示 S和\0 并且“S” 表示的为地址
3.键盘输入读取一行处理
cin.getline(name1, 19); 读取一行输入,丢弃换行符,自动结尾加空字符
cin.get(name1,19);读取一行输入,保留换行符,自动结尾加空字符
cin.get(); //是读取一个字符 可用于读取回车
cin.get(name1,19).get(); //可用于读取字符串,并读取回车
4.字符串操作(string)
string str1, str3;
string str2 = "Hello World!";
str1 = str2;
str3 = str1 + str2;
str1.size();
5.长字符串
wchar_t name1[] = L"Hello World";
char16_t name2[]=u"Hello World";
char32_t name3[]=U"Hello World";
6.原始字符串
cout << R"(I love you "King" to "\n" for sec)"<<endl;
打印:I love you "King" to "\n" for sec
打印“(方法:
cout << R"+*(I love you "King" to "\n" for sec)+*"<<endl;
7.C++不提倡使用全局变量
8.结构体复制
struct sname1{
char name[20];
int value;
}
struct sname2{
char name[20];
int value;
}
sname1 spt{"Lilei", 30}; //初始化 如果只有{} 初始化为0sname2 = sname1;
9.结构中的位字段
struct sname2{
unsigned int SN : 4; //占4位
unsigned int : 4; //占4位,空位
bool goodin :1;
bool goodtorgle :1
}
sname2 tr = { 14, true, false}; //初始化
10.作用域内枚举
enum EN{ red = 0, green = 10, blue= 20};
EN bis;
bis = EN(19); // 这是合法的, 19属于枚举区间内 0 ~ 31。 离20最近的2的幂为32,32 -1 就是枚举的上限。下限算法相同
11.OOP强调运行阶段决策,即运行时决定分配多少所需的空间。
12.给指针复制,必须强制类型转换
int *p;
p = (int *)0xB8000000;
13.指针与变量的大小
double *pn = new double; //double 为8字节
*pn = 0.0001
sizeof(pn), sizeof(*pn).
打印: 4 8
14.new 分配的空间是堆,这点显而易见。new 和 delete 成对出现
15.数组分配空间
int *p = new int[20];
delete [] p;
16.delete 不应对一个指针释放两次,对空指针delete两次是安全的
17.指针和数组等价
int *p = new int[20];
p[3] = 5;
p = p +1; //P指向第二个元素,指针地址增加了4个字节,指针会根据指针类型的长度增加地址
delete [] p;
18.数组名与指针
short tell[10];
cout << tell << endl; //数组名为第一个元素的地址
cout << &tell << endl; //数组名取地址是整个数组的地址
//虽然地址相同,但是+1的结果不同,
cout << tell + 1 << endl; //数组名为第一个元素的地址,加两个字节
cout << &tell + 1<< endl; //数组名取地址是整个数组的地址,加20个字节
//tell 等价于 &tell[0] 这是一个两字节的内存地址, tell+1 地址值加2. tell是一个 short * 指针
//&tell 是一个20字节的内存地址 &tell +1 地址值加20。&tell 是 short (*)[10]数组。
//初始化指针 short (*pas)[20] = &tell //括号不能省略,不然pas先与[20]结合,变成指针数组,包含20个元素。
//(*psa)[0] 第一个元素
打印结果:
0021FA28
0021FA28
0021FA2A
0021FA3C
19.数组名是第一个元素的地址
20.cout 会打印指针地址,但如果指针是 char * 则会打印指针指向的字符串,需要强制转换来打印char *的地址 (int *)
21.自动存储的变量放到栈(后进先出LIFO)中,反向被释放。栈将不断变大和缩小。
22.指针的指针,数组与指针
#include "stdafx.h"#include <iostream>struct times{int year;};int _tmain(int argc, _TCHAR* argv[]){using namespace std;times ss[3];ss[0].year = 100;(ss + 1)->year = 101;//等同于 ss[1].yeartimes s1, s2, s3;s1.year = 2001;s2.year = 2015;cout << "s1.year = " << s1.year << endl;cout << "s2.year = " << s2.year << endl;times *ppd[3] = {&s1, &s2, &s3};//指针数组,每一位存一个指针(ppd[1])->year = 2002;cout << "s2.year = " << s2.year << endl;//数组的指针,ppd是一个数组的名称,因此ppd是数组第一个元素的地址//第一个元素又是指针,那么ppa是一个指针,指向time的指针。const times **ppa = ppd;auto arp = ppd; //C++11的写法更简洁 //*ppa 是一个结构指针,ppa指向ppd第一个元素,因此*ppa是第一个元素,即&s1//(*ppa)->year 是s1的成员year ,括号不能少,因为 ppa->year不是指针 不能*(ppa->year)cout << "ppa = " << (*ppa)->year << endl;cout << "arp = " << (*(arp+1))->year << endl;return 0;}
23.vector 堆分配空间,灵活但效率低。array 栈分配空间,固定长度,相比数组安全高效。
vector<int> a;
array<int, 10> a;
24.数组和指针关系紧密,如果ar是数组名, ar[1] 等效 *(ar+1)
- C++学习笔记4 - 符合类型
- C语言学习笔记(4)类型转化,复合类型
- C/C++学习笔记28:类型转换
- Objective-C学习笔记-之布尔类型
- C语言学习笔记 类型修饰符
- C语言学习笔记 lesson3 整数类型
- c++primer学习笔记-----2.3复合类型
- c++primer学习笔记-----2.5处理类型
- C++primer学习笔记-----4.11类型转换
- C/C++学习笔记-标准库类型
- OBJ-C动态类型&静态类型学习笔记
- C/C学习笔记/类型、运算符、表达式
- c学习笔记(4)
- c++Primer学习笔记(6)--抽象容器类型
- C语言学习笔记03赋值类型转换
- linux & C++Primer 学习笔记--标准库vector类型
- c++primer 学习笔记(2.0)变量和基本类型
- c++primer学习笔记(3.2)标准库string类型
- git 个人手册(持续更新)
- Jsp中的EL表达式
- My SQL 基础常用语法
- Android基础入门教程——8.1.1 Android中的13种Drawable小结 Part 1
- 跟我一起写Makefile—概述
- C++学习笔记4 - 符合类型
- cyusb3014数据传输出错和蓝屏的问题
- “钱三篇”后续之复利小结
- Unity3d渲染层级关系小结
- navicat远程连接oracle
- iOS CollectionView
- 【抽象的5大层次】
- 【SQL优化】条件逻辑判断“case when then”
- typedef const external static automatic初涉