指针学习(7)----补充和总结

本文深入讲解指针概念,包括指针常量与常量指针的区别,数组指针与指针数组的写法及本质差异,指针函数与函数指针的作用。同时,探讨了如何安全使用指针,避免内存泄漏和程序崩溃。

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

绪论

之前讲的关于指针怎么使用方面的东西也差不多了,这里会对前面所讲的内容进行总结和提炼,并且会对指针使用过程中需要注意的问题进行说明,达到安全使用指针的目的。

总结

一、指针的概念

指针,一种数据类型,这个类型的变量专门用来存放地址,这叫做指针变量,简称指针。这里要注意,我们常说的指针全称是指针变量,指针变量的数据类型是指针。说一个指针的数据类型是指针这样的话有点蠢,总之,你搞懂就行啦。

二、指针常量与常量指针

对于这两个概念,记好一点即可。

指针常量没法改变其内存指向,但是其指向的内容可变;

常量指针没法修改内存内容,但是其内存指向可变。

三、数组指针和指针数组

本质不同

数组指针本质是一个指针,指向含有多个变量的数组;

指针数组本质是一个数组,数组中的元素都是指针变量,对于数组来说,数组名也表示一个指针,那么指针数组的数组名就是指向指针的指针。

写法不同

数组指针例子:int (*a)[3];,该数组指针指向一个含有3个整型变量的数组

指针数组例子:int *b[3];  ,该数组存储指针的最大数量为3

二者对比一下,简单粗暴来说,就是一个带括号,一个不带括号。其实指针数组中,数组为b,int *表示的数组b的类型;再数组指针中,可以理解为int *a和int a[3],表示的是一个专门指向整型数组且其大小为3的指针。

四、指针函数和函数指针

本质不同

指针函数:本质是一个函数,指针函数的返回值是一个地址,需要指针来接收,接收的指针类型要和对应的指针函数的类型一致;

函数指针:本质是一个指针,函数指针是针对于函数的指针变量。

写法不同

指针函数例子:int *fun();

函数指针例子:int (*fun)();

安全使用指针

程序定义一个变量,都会放在内存中,指针也不例外。那么首先在这里简单提一下内存,内存分为四个部分,堆、栈、全局存储区、常量存储区。其中堆和栈是很重要的两个点。栈是编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区,栈中变量的所占的内存大小是无法改变的,栈中变量的产生和消亡跟变量定义的位置和方式有关。堆则是一种动态方式分配的内存,通过动态分配方式申请的变量会存储在堆区,堆区中内存的大小可以发生改变,程序员可以自行控制其申请和销毁。

new和delete

new和delete是动态分配内存中重要的关键词,new是动态申请的关键词,在申请好动态内存之后,new会返回新分配的内存单元地址 ;但是在申请好了内存区域之后,得到了一块堆内存之后,系统不会区销毁,需要程序员手动销毁,这时就用到了delete关键词。

内存安全

当一块内存被销毁之后,这块内存区域就不可以再次使用了,如果有指针指向该区域时,需要将指针置空或者指向未被销毁的区域。如果使用了已经被销毁内存的指针来改变其指向内存的内容,就会出错,造成程序崩溃。

与之对应的,还有一个安全问题叫做内存泄漏,内存泄漏就是因为申请的内存空间未被及时销毁,造成系统浪费很多资源,程序执行起来也会十分笨重。销毁内存时,我们需要保留指向该堆内存的指针,如果说没有指针指向一块未被回收的堆内存,内存仿佛丢失一样,这就是内存泄漏。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值