9.3.2通过指针引用数组元素--P190C语言规定:如果指针变量p已指向数组中的一个元素指向同一数组中的下一个元素。p+1:指向同一数组中的前一个元素。p-1::例1:inta[10],*p=a;ll假设a[0]的地址是2000则:p的值为20001p+1的值为2004越界!!!p-1的值为1996
C语言规定:如果指针变量 p 已指向数组中的一个元素: ① p+1:指向同一数组中的下一个元素。 ② p-1:指向同一数组中的前一个元素。 例1:int a[10] , *p=a;// 假设a[0]的地址是2000 则: ① p的值为2000 ② p+1的值为2004 ③ p-1的值为1996 越界!!!
p.a[0]如果:p=&a[O]:Il相当于p=a;p+1,a+1一a[1](1)*(p+i)或*(a+i)是p+i或a+i所指向a[2]的数组元素--a[]例如:*(p+5)或*(a+5)就是a[5]对ai的求解过程:先按a+i*dp+i,a+i-a[i]计算出数组元素的地址,然*(p+i)后找出此地址所指向的单元C中的值。a[8]a[9]p+9,a+9
如果:p=&a[0]; // 相当于p=a; (1)*(p+i)或*(a+i)是p+i或a+i所指向 的数组元素-a[i]。 例如:*(p+5) 或*(a+5)就是a[5] 对a[i]的求解过程:先按a+i*d 计算出数组元素的地址,然 后找出此地址所指向的单元 中的值。 *(p+i)
p.a[0]如果:p=&a[0];l p=a;p+1,a+1a[1](2)指向数组元素的指针变量p也a[2]可以带下标。如:p[小、*(p+i)、*(a+i)等价于a[]p+i,a+i-a[i]*(p+i)?a[8]例1:int a[10]={2,4,6,8,10];a[9]p+9,a+9int *p=a;printf("%d %d %d %d\n" ,p[2],*(p+2),a[2],*(a+2))666//p[2]、*(p+2)、*(a+2 等价于a[2]
例1:int a[10]={2,4,6,8,10}; int *p=a; printf("%d %d %d %d\n" ,p[2], *(p+2),a[2], *(a+2)); //p[2]、 *(p+2)、 *(a+2) 等价于a[2] (2)指向数组元素的指针变量p也 可以带下标。 如:p[i]、 *(p+i)、 *(a+i) 等价于 a[i] *(p+i) 如果:p=&a[0]; // p=a;
a[0](3)如果指针p1和p2都指a[1]向同一数组的不同元素。a[2]则:p2-p1的值是4p1→a[3]a[4]Ⅱ表示两者之间元素个数a[5]注意:不能p1+p2a[6]p2a[7]a[8]a[9]
(3) 如果指针p1和p2都指 向同一数组的不同元素。 则:p2-p1的值是4 //表示两者之间元素个数 注意:不能p1+p2 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] p1p2
小结:引用一维数组元素有2种方法若: int a[10],*p =a ;引用一个数组元素,可用下面2种方法(1)下标法,如a[]形式(2)指针法,如*(a+i)、*(p+i)、p[i
若:int a[10] , *p = a ; //引用一个数组元素,可用下面2种方法: (1) 下标法,如a[i]形式 (2) 指针法,如*(a+i)、 *(p+i)、p[i]