第15讲 二维数组与指针
第15讲 二维数组与指针
指针与二维数组 define M 2 define n3 int b[MiN] 两种观点: 看成一个一维数组 看成数组的数组
2 指针与二维数组 #define M 2 #define N 3 … int b[M][N]; ▪ 两种观点: ▪ 看成一个一维数组 ▪ 看成数组的数组
将二维数组看成一个一维数组 int b[M]N]: 维数组b相当于一个有6个元 的一维数组 b|o|1 若有int*p=&b[o][o] 或p=bo]:(总之是列地址) P[2] b012l b[[门相对于数组起始地址的偏P[3] 移量为产N+j P[4] Cb[11[11 则P护N+门]或(p+产N+)表示每 轮数想元素 3
3 将二维数组看成一个一维数组 ▪ int b[M][N]; ▪ 二维数组b相当于一个有6个元素 的一维数组 ▪ 若有int *p=&b[0][0]; ▪ 或p=b[0] ;(总之是列地址) ▪ b[i][j]相对于数组起始地址的偏 移量为i*N+j ▪ 则p[i*N+j]或*(p+i*N+j)表示每 一个数组元素。 b[0][0] b[0][1] b[0][2] b[1][0] b[1][1] b[1][2] p P[0] P[2] P[3] P[4] P[5] P[1]
填空题:求二维数组元素的和鼠 Include <stdio. h> void maino 〔ita34-1357911.13,171921,23 int i.j. sum=o, * p= a[o]ox &a[d for〔i=0:3:i++ PrOJ for(=0; j<4: j++) P[] aol P[2] sum+=p[3+] P[3] printf sum=%4d", sum): P[4 P[5] Fa[lil 4
4 填空题:求二维数组元素的和 #include <stdio.h> void main() { int a[3][4]={1,3,5,7,9,11,13,17,19,21,23}; int i,j,sum=0,*p= ; for ( i=0 ;i<3;i++) for(j=0; j<4; j++) { sum+=p[ ]; } printf(“sum=%4d",sum); } a[0]或&a[0][0] i*3+j a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] …… P[0] P[2] P[3] P[4] P[5] …… P[1] p
填空:输出二维数组元输出果5 #include <stdio. h> 9111315 17192123 void maino inta[3][4]=1,3579,11,1317192123} int*p=a[o或&aroo]: for( : p<a[o]+12: p++) i(p-qo1)%4==0) 31alol1l rinf(\n") 5 printf"%4d",中) 7 9 13
5 #include <stdio.h> void main() { int a[3][4]={1,3,5,7,9,11,13,17,19,21,23}; int *p= ; for ( ; ;p++) { if (( )%4==0) printf("\n"); printf("%4d", ); } } 填空:输出二维数组元素的值 a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] …… p 1 3 5 7 9 11 13 输出结果: 1 3 5 7 9 11 13 15 17 19 21 23 a[0]或&a[0][0] p<a[0]+12 p-a[0] *p