C语言指针基础知识

指针(Pointer)就是内存的地址,C语言允许用一个变量来存放指针,这种变量称为指针变量。指针变量可以存放基本类型数据的地址,也可以存放数组、函数以及其他指针变量的地址。

1.指针变量作为函数参数

数组是一系列数据的集合,C语言不允许直接传递数组的所有元素到函数内部,如果希望在函数内部操作数组,必须传递数组指针。
参数的传递本质上是一次赋值的过程,赋值就是对内存进行拷贝。所谓内存拷贝,是指将一块内存上的数据复制到另一块内存上。对于像 int、float、char 等基本类型的数据,它们占用的内存往往只有几个字节,对它们进行内存拷贝非常快速。而数组是一系列数据的集合,数据的数量没有限制,可能很少,也可能成千上万,对它们进行内存拷贝有可能是一个漫长的过程,会严重拖慢程序的效率,为了防止技艺不佳的程序员写出低效的代码,C语言没有从语法上支持数据集合的直接赋值。

2.指针作为函数返回值

C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数。

不能将一个栈变量地址通过函数返回值返回;栈变量包括函数内部定义的局部变量和函数参数。具体原因涉及到C语言内存管理机制,栈变量在函数运行结束后会由系统自行收回,此时返回栈变量的地址可能会指向一个意想不到的值,该情况一般不会引起程序报错,实际中比较难定位问题,因此使用时要细心;

可以通过函数返回堆地址,堆地址要用free函数手动释放申请的内存,不然有可能发生内存泄露;当动态分配的内存不在使用时, 它应给被释放,这样以后可以重新使用内存。分配内存但是在使用完毕之后不进行释放将会引起内存泄露。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,导致在释放该段内存之前就失去了对该段内存的控制,从而造成了内存的浪费。

可以通过函数返回值返回静态区/全局区变量地址,因为在程序运行过程中静态区/全局区变量是一直存在的。

3.函数指针

函数和数组一样,都是占用内存中一段连续区域,数组名、字符串名、函数名在使用时都会指向占用内存区域的首地址。我们可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使指针变量指向函数所在的内存区域,然后通过指针变量就可以找到并调用该函数。这种指针就是函数指针。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值