c++指针小结

本文是关于C++学习的总结,重点讨论了指针的定义、声明与初始化,以及如何使用new运算符分配和释放内存。指针是一个存储地址的变量,声明时需指定其指向的类型。使用new分配内存后,需注意对指针进行初始化,防止未定义行为。使用delete释放内存后,指针并未删除,但仍需将其设为NULL以示无关联。

c++学习总结

c++ primer plus中指针和自由存储空间一节



前言

在对new创建的内存进行赋值时,通过观看案例与自身写的代码比较,发现自己一直以来的存在的误区,现进行小结。
提示:水平有限,仅供参考


一、指针的定义

首先根据计算机程序在存储数据时必须要确定的3种属性:
1.信息村存储的位置;
2.信息存储的类型;
3.信息存储的大小。
这个策略用来存储简单变量,但现在存储指针用一新的策略:
指针是一个变量,用于存储值的地址,而不是值本身。

二、声明和初始化指针

1.声明指针需要确定指针指向的值的类型。

指针声明代码:

int *p;   //指向int的指针,int*是一种复合

2.指针初始化是指被初始化的是指针,而不是指针指向的值

指针初始化代码:

int num =10;
int *p = #   //指向int的指针,将指针初始化为num的地址

3.可能会出现下面的问题:

指针初始化易出错的代码:

int *p ;
*p = 10;    //此时没有将指针初始化为地址

此时仅有地址的声明,没有初始化,即没有将指针指向内存的地址,容易引起地址随即指向内存地址。
故在对指针进行解引用之前必须要将指针指向一个确定的,适当的地址。

三、new来分配地址

1.new运算符用来找到指定长度的内存块,然后返回该内存块的地址。
代码如下:

int *p = new int;
new int;    // 返回一段内存大小为int大小的内存,然后返回该段内存的地址;
int *p;    //声明p为指向int的指针,然后将p指向返回内存的地址;

此时p完成了声明跟初始化,所以可以使用解引用操作来对p指向的内存进行赋值操作。此时p所指向的内存在堆区中(heap)。

int *p = new int;
*p = 10;
cout << *p << "\tp  = " << p << endl; // 指向的内存在堆区

2.对于使用new得到的内存完毕后,使用delete将内存块进行释放。

delete p;//将new int得到的int大小的内存进行释放,

此操作并非对指针p进行删除,指针p还能正常使用。只是相当于取消了对指针p的初始化操作,但声明依旧存在。

delete p;
p = NULL;
int num = 20;
p = &num;
cout << *p << "\tp  = " << p << endl; // 指向的内存在栈区

在delete之后,若是再将p指向一个简单变量的地址,此时p指向的值为简单变量的地址,指向栈区的地址。


总结

以上就是这次对指针的小结,本文仅仅简单总结了指针的使用,而指针对于数组,结构等类型有更多的场景。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值