2、以指针的方式访问数组
对于一个数组,数组名就是数组的指针,也可以理解未数组占有空间的首地址。
比如
int a[2];
a ----------> a[0]
a+1 -------> a[1] //这里的+1 ,+2,叫做偏移量,一般先确定a的地址 然后再通过偏移量来确定具体的地址。
a+2--------> a[2]
在数组名上直接加数字,相当于a[ 0 + 1]== a+1.也就是加的不是地址移动一个字,而是让他移动这个数组的类型的字节。
比如说 : 这里定义了为int 就移动4个字节。如果定义的数组是double型的,那么就移动8个字节。
也就是偏移量以数组元素类型为单位。
有如下表现形式
a == &a[0]; a+1 == &a[1]; a+i == &a[i]; //特别的 *(a + i)是访问数组的指针方式。
下面直接上例子:
#include <iostream>
using namespace std;
int main ()
{
int a[]={1,3,5,7,9}, i, *p;
for (i = 0; i < 5; i++)
cout << "a["<< i << "] = " << a{i]<< endl; //1、以下标方式访问
for (p = a; i <5; i++)
cout << "a["<< i << "] = " << p[i] <<endl; //2、 以指针作为下标访问 //这里我就只是觉得像给他换个名字。
for (i = 0; i < 5; ++i)
cout << "a["<< i << "] = " <<* (a+i)<< endl ; //3、 以指针方式访问
for (p = a ;p <a + 5; p++)
cout << "a["<< i << "] = " << *p << endl; //4、 以指针间址的方式访问
}
上面的例子介绍了
1、下标方式访问 2、指针方式作为下标访问 3、指针方式直接访问 4、指针间址的方式访问
程序中 这里特别提醒下 方法4的计算效率更加快点
前面提及到 计算机是先通过确定a的地址 然后再通过偏移量进一步确定具体的地址
然而方法4中 指针变量进行p++计算 不用每次计算数组元素的地址 因此效率更高
这里需要注意的是 如果有
for (i = 0; i < 5; a++)
cout <<"a["<<i<<"]="<<*a<<endl;