前言
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++<