C++ 快速理解数组名为何是常指针

本文通过C++实例讲解了动态内存分配,特别是使用new关键字为数组分配内存,并探讨了指针与数组的关系。文中指出,虽然指针可以改变所指的内存空间,但使用下标进行赋值时表现出类似常指针的行为。同时,文章对比了数组名与普通指针的区别,强调数组名作为常指针的特性,解释了在遍历动态分配的数组时可能出现的问题及解决方案。
摘要由CSDN通过智能技术生成

动态分配实例

此处使用的开发环境:visual studio 2019
下面我们通过C++中通过new来进行动态内存分配的实例带大家快速理解数组名为何是常指针

int *p=new int[n];
delete[]p;

上面,在堆中开辟n个整型内存空间,返回一个指向分配内存首地址的指针

通过数组元素的引用赋值(下标法);正常输出

在这里插入图片描述

下面是通过移动指针指向的整型空间对动态分配空间(可以将此处分配的n个整型内存空间理解为储存n个整型变量的数组)进行逐一赋值;循环赋值后输出该空间存储的值时,却无法正常输出

在这里插入图片描述

通过以下代码,说明该指针p不是像数组名一样的常指针;后文的“数组指针实例”中详细说明

在这里插入图片描述

此处对数组也进行上面类似的操作,发现会报错;更加说明数组名是常指针

在这里插入图片描述

小结:数组名本身就是一个常指针,而声明的非常指针虽然可以改变其指向的内存空间,但用下标法进行赋值、输出时可以看作是“常指针”,实际不是

数组指针实例

概念:一个指向数组的内存空间的指针,通常通过获取数组首地址(也可用数组名表示,或&数组名[0])来绑定指针与数组;另外,数组名是一个常指针,而数组指针通常是一个变量

下面输出和输入数组arr(指针p指向该数组,此时指针p即为数组指针)的元素时,通过移动指针p来进行相应操作时,无法正常输出数组元素

在这里插入图片描述

下面此时指针p进行了自减操作,可以正常输出,但其输出的值是反向

在这里插入图片描述

分析:由于数组指针是一个变量,经过循环赋值后,指针的指向超出数组(即指向数组最后一个内存空间的下一位空间);所以循环输出数组的值时需要先让指针自减,让其指向数组的最后一位,最后数组指针指向数组的首地址

  • 11
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

好吃懒洋洋

老板大气,蟹蟹支持!!!

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

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

打赏作者

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

抵扣说明:

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

余额充值