82指与数组 16 821指向数组的指针 费名是地址,指向数组的弯量存放的也是地址 神指悔数组的御囊的区别:1于p=a 指针变量p是变量可以赋值 a[0 数用指针变量引用数组元素, 必须关注其当前值。例如: +3 (p-1)、p[-1]等价于a[2] 3456789 10a[9] 2021/2/24
2021/2/24 16 a[0] a[9] p a[1] . . . . . . 1 2 3 4 5 6 7 8 9 10 a 数组名是地址,指向数组的指针变量存放的也是地址。 数组名 通过指针变量也可以引用数组元素。 和指向数组的指针变量的区别: p = &a[0] 等效于 p = a。 指针变量p是变量可以赋值, 数组名a是地址常量不能赋值。 8.2 指针与数组 8.2.1 指向数组的指针 用指针变量引用数组元素, 必须关注其当前值。例如: p = p + 3 *(p-1)、p[-1]等价于a[2]
82指与数组 【例8.4)输入五个整数,使用指针变量将这五个数 按从小到大排序后输出。 「输入a数组 main i int a5, *pp, p, * 9, t; for(p=a; p<a+4; p++) for (p=a; p<a+5; p++) Ppp scanf("%od",p); for(q=p+1;q<a+5;q++) for(p=a; p<a+4; p++) ppq &pp=p pp-g for (q=p+l; 9<a+5;q++) pp-p if( pp>*q) pp=q; ppap if (pp!=p 输出a数组 it=*p; p=*pp; pp=t; 图89选择法排序NS图 for (p=a; p<a+5; p++) printf("%od", *p) printf("In' 2021/2/24
2021/2/24 17 【例8.4】输入五个整数,使用指针变量将这五个数 按从小到大排序后输出。 main( ) { int a[5],*pp,*p,*q,t; for (p=a; p<a+5;p++) scanf("%d",p); for (p=a; p<a+4; p++) { pp=p; for (q=p+1; q<a+5; q++) if (*pp>*q) pp=q; if (pp!=p) { t=*p;*p=*pp;*pp=t;} } for (p=a; p<a+5; p++) printf("%d ",*p); printf("\n"); } 8.2 指针与数组 输入a数组 for (p=a; p<a+4; p++) pp=p for (q=p+1; q<a+5; q++) T *pp>*q F pp=q T pp!=p F *pp*p 输出a数组 图8.9 选择法排序N-S图
82指针与数组 18 821指向数组的指针 2.二维数组的指针 0 a 10111213 a+2a[2] 20212223 ()二维数组的地址 例如:inta[3][4]; ①二维数组名a是数组的首地址。 ②二维数组a包含三个行元素:a[01、a[1、a[2]。 三个行元素的地址分别是:a、a+1、a+2。 而a[0]、a1、a[2]也是地址量,是一维数组名 即*(a+0)、*(a+1)、*(a+2)是一维数组首个元素地址。 2021/2/24
2021/2/24 18 0 10 20 1 11 21 2 12 22 3 13 23 a ⑴ 二维数组的地址 例如:int a[3][4]; ① 二维数组名a是数组的首地址。 ② 二维数组a包含三个行元素:a[0]、a[1]、a[2] 。 a[0] a[1] a[2] a 三个行元素的地址分别是:a、a+1、a+2。 而a[0]、a[1]、a[2]也是地址量,是一维数组名, 即*(a+0)、*(a+1)、*(a+2)是一维数组首个元素地址。 8.2 指针与数组 8.2.1 指向数组的指针 2. 二维数组的指针 a+1 a+2
82指针与数组 19 821指向数组的指针 2.二维数组的指针 a[O+1a[01+2a0+3 a数组0123 a数组10111213 a2]数组_20212223 (2)二维数组元素的地址 a[2]+1a2]+2a[2}+3 a[0]、a1、a[2是一维数组名 所以a[i]+j是数组元素的地址 数组元素a[i[j的地址可以表示为下列形式: &a[i[j、ai]+j、*(a+i)+j 2021/2/24
2021/2/24 19 ⑵ 二维数组元素的地址 a[0]、a[1]、a[2]是一维数组名, 所以a[i]+j是数组元素的地址。 数组元素a[i][j]的地址可以表示为下列形式: &a[i][j]、a[i]+j 、*(a+i)+j 0 10 20 1 11 21 2 12 22 3 13 23 a[0]数组 a[1]数组 a[2]数组 8.2 指针与数组 8.2.1 指向数组的指针 2. 二维数组的指针 a[2]+1 a[2]+2 a[2]+3 a[0]+1 a[0]+2 a[0]+3