【C/C++】数组和指针的区别

本文详细探讨了C/C++中数组和指针的区别,包括它们的存储位置、可变性、内容修改及访问效率。特别讨论了指针操作如*p++、*(p++)和*(++p)的差异,并通过示例展示了数组和指针在内容复制、计算内存容量以及有const修饰时的应用注意事项。
摘要由CSDN通过智能技术生成

前言

C/C++程序中,指针和数组在很多地方都会用到,而且通常是可以相互换着使用的,那我们这种时候就更需要了解两者之间的区别了。

数组要么在静态存储区被创建(如全局数组),要么在栈上被创建。数组名对应着一块内存,其地址与容量在其生命期内是不可变的,只有数组的内容可以改变。

指针可以随时指向其他变任意类型的内存块,也就是“可变的”,指针远比数组要灵活和高效,指针访问数组元素比采用数组形式访问元素的效率要高出不少,指针它无须每次都重新计算地址,而使用下标符合[],每次都需要进行变址寻址,这样的时间消耗在数组容量较大时是不可忽略的。特别当采用向ptr++这样的操作持续进行偏移访问时,效率的提高的很明显的。但是运用指针变量进行运算时要非常小心。

下面我就简单分析以下指针和数组的一些区别和各自的一些用法上需要注意的要点。

一、*p++、*(p++)、*(++p)的比较

在C/C++语言中,++运算和*运算符具有相同的优先级,且运算结合的方向是自右向左,所以*p++和*(p++)的作用是完全相同的,都是先得到p指向的内容,再将p向下移动一位(指向下一个元素)。但是*p++和*(++p)的作用就不同了,*(++p)是p先指向下一个元素,然后再取值。一段简单的代码演示以下区别吧。
#include <iostream>
using namespace std;

int main(){
        int a[10] = {0,1,2,3,4,5,6,7,8,9};
        int *p;

        p = a;
        cout<<*(p++)<<endl;
        p = a;
        cout<<*p++<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值