c++中指针的相关知识

本文详细解析了C++中链式栈删除节点的操作,重点讲解了指针p在删除过程中的作用,以及delete操作的含义。在删除节点时,p用于保存原来的top指针,防止丢失,delete操作释放了p指向的内存,但p本身并未被删除,若不设为NULL,可能会成为野指针,导致潜在风险。理解这些概念对于C++基础和链表操作至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在看书中链式栈中,看到了删除栈中有以下语句:

ListNode *p=new ListNode();
p = top; top = top->link; delete p;

这里p的出现引起了我的困惑。可能是c++基础不牢固,所以进行了一系列搜集资料,最后理解如下:

1、首先说一下指针的有关知识。例,int *p;p = &3;

p指向的是地址,*p指的是数值。或者说,在内存中,p所在的那块内存中存的是一个地址数值,这里是3这个数值的地址存到了p所指的那块内存里。

*p=*q,意思是说,将q指针指向地址的值传给p指针指向的地址,这时,p和q所指的两个地址中的值是相同的了,但是此时p和q是指向不同地址的(当然是在原先p和q就不同的情况下)。

而p=q,则是说将q指针指向p指针指向的地址,此时pq指向同一位置,共享同一段内存,但是,p和q是有自己的内存的,只是两者内存中存的地址是一样的。(不代表p和q是一直相等的)

2、所以,这里删除节点操作就需要有一个新的指针来标记一下原先的top头指针,否则top进行后退后,原先的top就找不到了(只是找不到指它的指针,但它还在那里占据空间)

3、delete操作和new操作相对应(就如c语言中的malloc和free相对应),一般成对出现。但是delete指针操作不代表把这个指针删掉了,而是清空指针p所指那部分内存。

这里摘抄一个网上的说法,我觉得很有意思:
 

delete命令指示释放了那个指针原本所指的那部分内存而已。
被delete后的指针p的值(地址值)并非就是NULL,而是随机值。

也就是被delete后,如果不再加上一句p=NULL,p就成了“野指针”,在内存里乱指一通。

如果在定义p的那个函数在delete了p后,没再调用p,就没什么问题,在这个函数结束后,p就会跟其它变量一样被消除。
但若在那个函数里delete了p后,又没再给p赋值(地址值),再次调用p就危险了,因为这时p在内存里乱指,有可能指到一些重要地址,随时可能系统崩溃。

//p=NULL是个好习惯

    //就像你蹲完厕所要洗手一样


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小小姝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值