《C++ Primer Plus》Ch04笔记
2017-09-30 14:09
141 查看
数组
不能将一个数组赋值给另一个数组。部分初始化数组,编译器将其他元素设置为0。
初始化数组的”[]”为空,可以让编译器计算数组大小。
初始化数组可以省略”=“;可使用空的”{}“,此时所有元素为0.
字符串
初始化:char cat[2]={'a','\0'}必须包含空字符’\0’,其ASCII为0。
char cat[2]={'a','b'}不是字符串,用
cout打印时,会将其内存地址随后的内存中,储存的各个字节解释为字符打印出来,直到遇到’\0’。
‘S’是字符常量,赋值操作
char a='S',”S”是字符串,是字符’S’,’\0’的组合,
char a="S"是错误的。
结构
//定义结构inflatable struct inflatable { char name[20]; float volumn; }; inflatable hat = {"binggo", 50.1}; //创建inflatable结构的变量hat //与数组不同,hat[0]没有意义。 cout << hat.name; //访问结构成员
初始化结构时,可以省略“=”,
inflatable hat;此时未提供数据,则全部初化为0.
将结构定义和变量声明放在一起,
struct inflatable //结构名称可以省略,但此后不能再声明该结构变量了 { char name[20]; float volumn; } bing; //此时bing内数据成员全部为0
结构数组:
inflatable arr[2] = {{"Wu",2.0},{"Bi",3.0}};
共用体
union id { long id_num; char id_char[20]; };
共用体每次只能储存一个变量,其大小为最大成员的大小。
枚举
enum spectrum {red, orange, yellow}; spectrum band; band = red;
在默认的情况下,第一个枚举量为0,第二个为1,…。
枚举只定义了复制运算符。
枚举的值只能是整数,即int,long,long long类型。
每个枚举都有取值范围,可以将取值范围内任何整数值赋值给枚举变量。
指针
数据的3种属性:1.地址;2.值;3.类型。声明语句指出了变量名、值的类型,还让程序给值分配了内存。和数组一样,指针都是基于其他类型的。如char的地址和double的地址差不多(栈区),占8字节,但char和double使用的字节数不同,储存值时使用的格式也不一样,所以声明指针时需要有类型。
C++创建指针时,计算机将分配用来储存地址的内存,但不会分配指针所指向的数据内存。
一定要在解引用指针前,将指针初始化一个确定的地址。如
int* a;*a=1;是很危险的。
计算机通常把地址当做16进制整数处理,但指针不是整型。
int* p; p = 0xB8000000; //C语言允许,但C++不允许 p = (int*)0xB8000000; //转换类型后才能赋值
将指针变量加1,其增加的值等于指向类型占用的字节数。
对数组名取地址,得到的是整个数组的地址,其单位长度为整个数组的长度。
const char* ps = "binggo"; //"binggo"是字符常量,需要用cosnt修饰ps cout << ps << ", " << (int*)ps << endl; //Note:读取字符常量地址时需要强制类型转化。
类型组合
// person为结构 person m1,m2,m3; person* arr[3] = {&m1,&m2,&m3}; //指针数组 person** p = arr; //p为指针,它指向的对象还是指针 cout << *(p+1); //==arr[1]=&m2
vector/array
#include <vector> #include <array> using namespace std; //使用g++编译时,添加编译选项-std=c++11 g++ -std=c++11 choices.cpp && ./a.out
vector类使用new和delete来个管理内存的,故vector对象储存在堆中。
定义
vector<typeName> vt(n);,n可以是变量。初始化只能一个一个来
vt[0]=1.2;,不能像数组那样。
array定义
array<typeName,n> arr;,n只能是常量。初始化类似数组。可以直接赋值
arr1=arr2.
arr2.at(1)=1.1;,成员函数at(),用于捕获非法索引。
储存类型
自动储存在函数内部定义的常规变量被称为自动变量,是一个局部变量,其作用域为包含它的代码块,代码块是被包含在花括号中的一段代码。自动变量储存在栈中,执行代码块时,变量依次加入到栈中,各个变量的内存地址连续,离开代码块时按相反顺序释放这些变量。
静态储存
在整个程序执行期间都存在的变量称为自动变量,定义静态变量两种方式:1.在函数外部定义;2.关键字
static。静态储存变量储存在数据段。
动态储存
使用new和delete方法定义的变量,存储在堆或自由储存空间中。
相关文章推荐
- C++primer plus第六版课后编程练习答案3.4
- c++ primer plus(第6版)中文版 第五章编程练习答案
- C++ Primer Plus 笔记003
- C++ Primer Plus 读书笔记 (1 -2 章)
- C++ Primer Plus 第六章笔记
- C++ Primer Plus 读书笔记(第10、11章)
- C++ Primer Plus的若干收获--(八)
- 重读C++ Primer Plus
- C++primer plus第六版课后编程练习答案10.3
- C++ primer plus 八九章总结
- C++PRIMER PLUS第六版课后编程答案 4.6-4.10
- C++primer plus第六版课后编程练习答案12.4
- 《C++ Primer Plus(第六版)》(21)(第十一章 使用类 编程题答案2)
- c++ primer plus 第八章《编程题8.8.3》
- C++ Primer Plus的若干收获--(十一)
- C++ primer plus第六版课后编程练习答案:8.1
- C++ Primer Plus 阅读计划
- C++primer plus第六版课后编程题答案 6.4
- C++primer plus第六版课后编程题答案 6.6
- [笔记] 《C++ Primer Plus(第6版)》