c++ primer plus 第六版 4.7部分笔记 //自用

目录

4.7 指针和自由储存空间

4.7.1声明和初始化指针

4.7.2指针的危险

4.7.3 地址和数字转换

4.7.4用new分配内存

4.7.5用delete释放内存

4.8指针、数组和指针算数

4.8.3 让指针等于数组名

4.8.4 用new创建动态结构

4.8.5 自动储存、静态储存和动态储存

4.10 数组替代品 vector 和 array

4.10.1 模板类vector

4.10.2 模板类array(C++11)


4.7 指针和自由储存空间

4.7.1声明和初始化指针

int* ps;
//ps是一个指向int的指针

int* p1, p2;
//p1是一个指向int的指针,而p2是一个int变量

地址的长度都是一样的。

4.7.2指针的危险

(无new的情况下)一定要现设个变量(已经占用了一定的内存),让某个指针指向它。不能让指针指向一个没有内存的东西。

4.7.3 地址和数字转换

地址是十六进制数,但不能把数字(即使是十六进制的)赋给地址。

可以进行类型转换。

pt = (int*)0xB8000000;

4.7.4用new分配内存

int* pn = new int;
//第二个int说明 new为pn准备了可以储存一个int数的内存
//pn指向这个内存

int* pn = new int[2];
//第二个int说明 new为pn准备了可以储存一个int数组(这个数组中有两个元素)的内存
//pn指向这个内存

使用动态数组只要把指针当作数组名使用即可

4.7.5用delete释放内存

int* ps = new int;
delete ps;

int* psome = new int[10];
delete [] psome;
//若写成 delete psome ,只会删除数组中第一个元素

只能用delete释放用new建的指针

若用new创建了指针A,又把指针A赋给指针B,那么deleteB也可以。但是A和B中只能delete一个且只能delete一次。

4.8指针、数组和指针算数

c++将数组名解释为数组第一个元素的地址。

double* pw = wages;
//将pw初始化为wages数组中的第一个元素的地址
wages = &wages[0];
//数组名是数组中第一个元素的地址
pw++;
//pw将指向wages中的第二个元素

指针的值可以修改,数组名不能。

sizeof(数组)得到数组长度,sizeof(指针)得到指针长度 即一个十六进制数占用的内存

short tell[10];

short* pas[10] = &tell
//pas时一个指针数组,包含10个元素,pas[1]---pas[9]都是指针,每个指针指向一个short
short(*pas)[10] = &tell;
//pas指向 含有10个元素的short数组

4.8.3 让指针等于数组名

如果指针指向数组,要想输出地址数组地址

int main()
{
	char ch[10] = "qwrty";
	char* ps;
	ps = ch;
	cout << ps;   //输出 qwrty
	cout << (int*)ps; //输出十六进制数
	cout << (int)ps; //输出十进制数
	return 0;
}

4.8.4 用new创建动态结构

4.8.5 自动储存、静态储存和动态储存

在函数内部定义的常规变量使用的自动储存空间,被称为自动变量。

静态储存是整个程序执行期间都存在的储存方式。要么在函数外面定义它,要么在声明变量是用static

动态储存 new delete

4.10 数组替代品 vector 和 array

4.10.1 模板类vector

类似于string,也是动态数组。

使用vector要包含头文件vector,vector包含在名空间std中

#include<iostream>
#include<vector>
using namespace std;
int main()
{
	vector<int> vi;  //vi是一个int变量
	vector<double> dddo(9);  //dddo是一个 包含 9 个double类型数的数组
//这个‘9’可以是常量 也可以是变量
	return 0;
}

4.10.2 模板类array(C++11)

使用array要包含头文件array,array也位于名空间std

使用静态内存分配

#include<iostream>
#include<array>
using namespace std;
int main()
{
	array<int, 1> vi;  //vi是一个int变量,这个“1”要写,否则会少一个参数
	array<double, 9> dddo;  //dddo是一个 包含 9 个double类型数的数组
//这段代码 上述的“1” “9”都不能是变量
	return 0;
}

可以对vector和array的数组使用 .at()

dddo.at(11) ,c++会检查超界错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值