《C++ Primer Plus》Ch04笔记
来源:互联网 发布:微信群淘宝优惠券提成 编辑:程序博客网 时间:2024/06/14 00:15
数组
- 不能将一个数组赋值给另一个数组。
- 部分初始化数组,编译器将其他元素设置为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"
是错误的。
结构
//定义结构inflatablestruct 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修饰pscout << 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++11g++ -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方法定义的变量,存储在堆或自由储存空间中。
阅读全文
0 0
- 《C++ Primer Plus》Ch04笔记
- C Primer Plus - 笔记
- c primer plus笔记
- c primer plus 笔记
- 《C Primer Plus》笔记
- C++Primer Plus学习笔记
- 《C Primer Plus》学习笔记
- c primer plus 程序笔记
- 《C Primer Plus》学习笔记
- C Primer Plus 学习笔记
- C Primer Plus笔记-第一章
- 《c primer plus》笔记<一>
- C Primer Plus Fifth Edition 笔记chapter1
- C Primer Plus Fifth Edition 笔记chapter2
- 《C++.Primer.Plus》学习笔记(一)
- 《C++.Primer.Plus》学习笔记(二)
- (c primer plus第五版) 学习笔记
- 《C primer plus》笔记--Chapter 1
- 国外java、IT技术网站汇总
- 由 Python2 和 Python3 中 socket.inet_aton() 实现不同引发的血案
- linux xshell ssh 公钥登录
- oracle之排序
- MapReduce架构
- 《C++ Primer Plus》Ch04笔记
- 编写一个程序,分别使用字节流和字符流拷贝一个文本文件
- 【使用教程】Spire.XLS 教程:在C#中隐藏或显示Excel注释
- HDU4810 Wall Painting(组合数学+二进制)
- IDEA运行Spark出现UnsupportedClassVersionError: scala/tools/:Unsupported major.minor version 52.0
- linux内核发生段错误时进行调试
- 解析get参数被编码的参数
- Qt程序如何在Mac上用X-code编译
- 深入理解向上转型与向下转型