此处使用的开发环境:visual studio 2019 下面我们通过C++中通过new来进行动态内存分配的实例带大家快速理解数组名为何是常指针
int *p=new int[n];
delete[]p;
上面,在堆中开辟n个整型内存空间,返回一个指向分配内存首地址的指针
通过数组元素的引用赋值(下标法);正常输出
下面是通过移动指针指向的整型空间对动态分配空间(可以将此处分配的n个整型内存空间理解为储存n个整型变量的数组)进行逐一赋值;循环赋值后输出该空间存储的值时,却无法正常输出
通过以下代码,说明该指针p不是像数组名一样的常指针;后文的“数组指针实例”中详细说明
此处对数组也进行上面类似的操作,发现会报错;更加说明数组名是常指针
小结:数组名本身就是一个常指针,而声明的非常指针虽然可以改变其指向的内存空间,但用下标法进行赋值、输出时可以看作是“常指针”,实际不是
概念:一个指向数组的内存空间的指针,通常通过获取数组首地址(也可用数组名表示,或&数组名[0]
)来绑定指针与数组;另外,数组名是一个常指针,而数组指针通常是一个变量
下面输出和输入数组arr(指针p指向该数组,此时指针p即为数组指针)的元素时,通过移动指针p来进行相应操作时,无法正常输出数组元素
下面此时指针p进行了自减操作,可以正常输出,但其输出的值是反向
分析:由于数组指针是一个变量,经过循环赋值后,指针的指向超出数组(即指向数组最后一个内存空间的下一位空间);所以循环输出数组的值时需要先让指针自减,让其指向数组的最后一位,最后数组指针指向数组的首地址
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有