指针与自由存储空间

(1):简单的指针用法

1.1.简单的指针用法是/将指针初始化为/变量/的地址;

1.2.变量:编译时/分配的/有名称的/内存

1.3.这时候指针只是为/可以通过名称/直接访问/的内存/提供了一个/别名

例:

#include <iostream>
int main()
{
sing namespace std;
int higgens = 5;//变量higgens的值为5
int * pt = &higgens;//将higgens的地址赋给pt 此时*pt = higgens的值 = 5

}

(2):指针真正的用武之地

2.1.在运行阶段/分配未命名的内存/用来存储值;

2.2.在这种情况下,我们只能够通过指针来访问内存

(3):new

3.1.使用方法:

int * pn = new int;(int也可以替换成double等等)

3.2.new运算符会根据类型来确定需要多少字节的内存,然后找到这样的内存,并将这压根的内存的地址告诉程序,即将地址赋给pn,pn就是被声明为指向int的指针; pn是地址,*pn是值

3.3.需要注意的是,使用new分配的内存块通常与使用变量分配的内存块不同,前者从被称为堆(heap)或自由存储区(free store)的内存区域分配内存;后者.........栈(stack);

(4) :delete

4.1.delete 要与new严格配对使用

不要使用delete来释放不是new分配的内存

不要使用delete来释放同一个内存块两次

使用new[]分配内存,要使用delete[]释放

使用new为一个实体分配内存,要使用delete(没有方括号)来释放

对空指针应用delete是安全的

(5):使用动态数组

5.1.:使用方法:int * psone = new int [10];

假设int占4个字节,将指针沿正确的方向移动4个字节,则指针将指向第二个元素;共有10个元素,40个字节这就是指针的移动范围

5.2.:访问:

访问的时候将指针当作数组名即可,psone [0] 表示第一个元素....psone [7]表示第八个元素。

例:

#include <iostream>
int main()
{
using namespace std;
double * p3 = new double [3];//space for 3 doubles
p3[0] = 0.2;
p3[1] = 0.3;
p3[2] = 0.4;

cout << "p3[1] is" << p3[1] << "./n";//结果为0.3
p3 = p3 + 1;
cout << "p3[1] now is" << p3[1] << "./n"//结果为0.4

}

5.3:p3为地址,+1后指向下一个元素的地址;

5.4:相邻的int地址通常相差两个字节或四个字节,这表明指针算数有一些特别的地方,后续继续探讨

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值