那么如何使指针变量指向一维数组的其他元素呢?比如如何使指针变量指向 a[3],同样可以写成p = &a[3],但是除了这种方法之外,C语言规定:如果指针变量p已经指向一维数组的第一个元素,那么p+1就表示指向该数组的第二个元素。注意,p+1不是指向下一个地址,而是指向下一个元素。“下一个地址”和“下一个元素”是不同的。比如int类型数组中每一个元素都占 4 字节,每一个字节都有一个地址,所以int型数组中每一个元素都占4字节,每一个字节都有一个地址,所以 int 型数组中每一个元素都有 4 地址。如果指针变量 p 指向该数组的首地址,那么“下一个地址”就是表示 p 往后移动 4 个地址,即第二个元素的首地址。
#include<stdio.h>
int main(void)
{
int a[] = {1, 2,3,4,5};
int *p = a;
printf("*p = %d, p + 1 = %d\n", p, p+1);
printf("*p = %#X, p + 1 = %#X\n", p, p+1);
printf("*p = %p, p + 1 = %p\n", p, p+1);
return 0;
}
p+1,表示地址往后移动4个,但是并不是所有类型的数组 p+1都后移4个地址。p+1的本质是移动到数组的下一个元素的地址,所以关键是看数组是什么类型的,
知道元素的地址后引用元素就简单了,如果 p 指向的是第一个元素的地址,那么 p 表示的就是第一个元素的内容。同样,p+i表示的是第i+1个元素的地址,那么(p+i)就表示第i个元素的内容。即 p+i 就是指向元素a[i]的指针,*(p+i)就等于a[i];