一、一维数组与指针
(1).数组指针
在C语言中,数组的首地址称为数组指针。而C++规定,数组的首地址可用数组名a表示,因此,数组a的数组指针=a=&a[0]。
给个例子:
int (*pName)[N]; 对一维数组取地址,等价于数组指针而不是二级指针。
int arrray[10];
int(*pa)[10] = &array; 【正确】
int **pa = &array; 【错误】
(2).数组指针变量
【定义】存放数组元素地址的变量称为数组指针变量。
int a[5]; int *p=&a[0]; //p为数组指针变量。
eg:用指针变量访问数组元素。
#include <stdio.h>
void main( void)
{
int a[5]={0,1,2,3,4},i,j,*p,n=5;
p=a;
for (i = 0;i < n;i++)
{
printf("*p\t\n";*p);
//通过移动指针变量,依次访问数组元素。
p++;
}
p = a;
for(i = 0;i < n;i++ )
{
printf("*(p + i)\t\n";*(p+i));
//指针变量不变,用p+i 访问数组第i个元素。
}
for(i = 0;i < n;i++)
{
printf("*(a + i)\t\n";*(a + i));
//指针变量不变,用 a+i 访问数组第i个元素。
}
for (i = 0;i < n;i++)
{
printf("p[i]\t\n";p[i]);
//以指针变量名作为数组名访问数组元素。
}
}
输出:
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
0 1 2 3 4
(3).数组元素的引用
在一维数组a[ ]而言,当p=a后,有如下等同关系成立:
① p+i=a+i=&a[i],即p+i、a+i 均表示第i个元素的地址&a[i]。
② *(p+i) =*(a+i)=p[i]= a[i]。即*(p+i), *(a+i), p[i]
均表示第i个元素值a[i]。//p[i] 的运行效率最高。
总结:一维数组的第i个元素可用四种方式引用,即:
a[i]、*(p+i) 、*(a+i)、p[i]。