关于指针的一点心得

写这篇文章,不是因为觉得自己对指针问题了解得多么深入,而是希望通过分享的方式来让自己得到提高。

 

在谈指针之前,我们先要谈谈NULL。这就需要从定义#define NULL ((void *)0)谈起。从定义我们可以很明确地知道指向NULL的指针事实上是将指针的初始指向地址指向了0地址,而通常这个地址被作为我们用来判断指针是否为空,那么0地址真的就为空么或者说不存在么?如果不为空这个地址为什么又可以被用来作为判断是否分配内存的一个特殊值?事实上0地址是存在的,只是在系统设计总这个地址被作了特殊的用处,并采取了相应的保护初始,我们不能对其进行修改,当然也不能被分配给我们的应用程序来作为数据操作用,而其他的内存地址都是可以在某系条件下被系统或者我们操作修改,这就是我们能够把它作为判断标准的一个理由。鉴于此,为了防止对野指针操作的问题,我们可以在初始化和对一个指针使用完成之后马上将其置NULL同时对其采取判断。

 

接下来,我们就可以正式讨论指针的问题了,我们知道无论我们定义声么样的指针,他们本身所占据的内存空间都是相同的,即为存储一个指针地址值空间打下的内存空间。而存在多种数据类型指针的理由在于,为我们通过指针操作指定位置和访问的空间大小做限制。这就是用*定义指针的同时还必须要在其前面知名他所指向数据类型的理由。这对于不直接用malloc()之类的函数来分配内存空间的指针是非常重要的。当然对于指向用malloc()分配的内存的指针,我们则可以全部定义为void *。因为对于规定了长度的数据类型我们是有办法来对他的内存空间进行访问的。

 

接着再谈一点,就是对于回局部变量指向的内存并作为返回值问题,我们可以通过malloc()和free()来实现内存的管理问题。这对我们需要返回指针,但指针指向了一个局部变量从而导致应用出现内存问题是一个可行的解决方案(因为我不确信这是否为最佳,所以我只能确定其是可选方案)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值