在C中,在几乎所有使用数组名的表达式中,数组名的值是一个指针常量,也就是数组第1个元素的地址。
数组只有在两种 场合下,数组句不用指针常量来表示:当数组名作为sizeof操作符或单目操作符&的操作时。
int a[10];
int b[10];
int *c;
......
c = &a[0];
表达式&a[0]是一个指向数组第1个元素的指针。但那正是数组名本身的值,相当于c = a;
除了优先级之外, 下标引用和间接访问完全相同。如:array[subscript] 相当于*(array + (subscript))
如:
int array[10];
int *ap = array + 2;
输出:
ap = array + 2或&array[2];
*ap = array[2]或*(array+2);
ap+6 = array+8或&array[8];
*ap+6 = array[2]+6;
*(ap+6) = array[8];
ap[-1] = array[1];
将数组中的所有元素都置0:
下标方案1:
int array[10],a;
for(a = 0; a < 10; a++)
array[a] = 0;
方案2:
int array[10], *ap;
for(ap = array; ap < array + 10; ap++)
*ap = 0;
把一个数组的内容复制到另一个数组:
下标方案1:
#define size 50
int x[size];
int y[size];
int i;
int *p1, *p2;
void try1(void)
{
for(i = 0; i < size; i++)
x[i] = y[i];
}
方案2:
void try2(void)
{
for(i = 0, p1 = x, p2 = y; i < size; i++)
*p1++ = *p2++;
}