C语言编程指针的应用场合

参加工作两年了,第一次在CSDN写博客。由于一直从事的是手机嵌入式开发,因此和C语言,和指针也就打了两年交道。

网络上有不少牛人写了关于C语言指针的各种使用方法,主要是大谈语法规则类的,在此,我想主要写一下C语言指针的实际应用。

写作提纲如下:

指针的应用场合:
1,动态内存分配,链表操作。
2,作为函数参数,间接地传引用调用。指针加const修饰符。
3,作为函数返回值。
4,作为函数参数,传递数据,避免结构体类型的大量数据拷贝。特别是作为void类型数据指针。
5.1 作为回调函数,实现同步机制。
5.2 形成函数指针数组,作为设备驱动程序规范。
5.3 形成函数指针数组,作为菜单执行的动作。
5.4 作为设计原则,接口与实现分离:如brew的AEE,OEM层。

 

1,动态内存分配,这是指针最常见的用法。和动态内存相对应,静态内存主要是局部变量,全局变量,以数组为例,探究哪些场合更应该使用指针。如果数组定义在函数之内,这带来了三个限制:

a,数组大小不能过大,因为数组的内存是分配在栈空间,对于每一个进程来说,栈大小是固定的,且栈空间一般不大。如果函数调用时多层嵌套,那么定义大的数组就很容易导致栈空间溢出,改写了其他进程的栈空间,带来一些莫名奇妙的问题,debug时很难定位。

b,数组的内存大小是确定后,就无法更改,因此必须分配足够大的内存空间,这就可能导致内存浪费。

c,数组的内存分配在函数内部,这样的内存空间无法带到函数外。

对于这三个限制,动态内存分配很好地解决。动态内存是分配在堆空间,一般来说有足够的空间,而且可以对malloc的返回值作判断是否分配成功。另外,使用链表这样的数据结构,可以灵活的分配内存,释放内存,再者,堆空间是可以带出函数外的。

如果是全局数组,当然不用担心栈空间溢出,内存无法带出函数外的问题,但是毕竟内存是有限的,不能为了某一个应用,长时间占据很大的内存,而且数组对于插入一个数据,删除一项数据算法比较麻烦。因此动态管理内存,采用链表的方法是必须的。

当然,动态内存分配,采用链表的数据结构,会带来自身的空间占用,如pNext指针,pPrev指针。因此,总结起来:当使用的数据量比较大,且范围变化又比较大的时候,可以考虑使用指针;全局变量可以用在需要共享内存,而数据量不是特别大的场合。局部变量,用在中间过程。

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值