9.3.1指向数组元素的指针P189 可以用一个指针变量指向一个数组元素。 例如: inta[10]={1,3,5,7,9,11,13,15,17,19}; int *p阳 1 a[o] ② p p=&a[o]; &.a[0] 3 5 等价于int*p=a; 7 等价于p=a; 或int*p=&a[0]; 9 11 注意1:数组名a代表数组首元素的地址。 13 注意2:p=a;是“把a数组的首元素的 15 17 地址赋给指针变量p”,而不是“把数组 19 a[9] a各元素的值赋给p
可以用一个指针变量指向一个数组元素。 int a[10]={1,3,5,7,9,11,13,15,17,19}; ① int *p; ② p = &a[0]; 等价于p=a; 等价于 int *p=a; 或int *p=&a[0]; 注意1:数组名 a 代表数组首元素的地址。 注意2:p=a; //是“把a数组的首元素的 地址赋给指针变量p” ,而不是“把数组 a各元素的值赋给p” 。 例如:
9.3.2 通过指针引用数组元素-P190 C语言规定:如果指针变量p已指向数组中的一个元素: ① p+1:指向同一数组中的下一个元素。 ② p-1:指向同一数组中的前一个元素。 例1:inta[10],*p=a;∥假设a[0]的地址是2000 则: ① p的值为2000 ② p+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→ 如果:p=&a[0];∥相当于p=a; p+1,a+1→ ao] (1)(p+i)或*(a+i)是p+i或a+i所指向 的数组元素-a[叮。 a2] 例如:*(p+5)或*(a+5)就是a[5] 对a[叮的求解过程:先按a+i*d 计算出数组元素的地址,然 p+i,a+i_ *(p+) a 后找出此地址所指向的单元 中的值。 a[8] p+9,a+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→ 如果:p=&a[0];∥p=a; p+1,at1> (2)指向数组元素的指针变量p也 羽明吧 可以带下标。 如:p叮、*(p+)、*(a+i)←a叮 · p+i,a+i- *(p+) a时 8 例1:inta[10]={2,4,6,8,10} a[8] p+9,a+9→ a[9] int *p=a; printf("%d%d%d%dn",p[2],*(p+2),a[2],*(a+2)i lp[2]、*(p+2)、*(a+2)←→a[2] 66 66
例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;
(3)如果指针p1和p2都指 a[0] 向同一数组的不同元素。 a[1] a[2] 则:p2-p1的值是4 p1 a3] /表示两者之间元素个数 a4] 注意:不能p1+p2 a[5] a[6] p23 a7] 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