第21讲二维数组与指针.pptVIP

  • 0
  • 0
  • 约7.25千字
  • 约 26页
  • 2017-02-06 发布于重庆
  • 举报
第21讲二维数组与指针

《解析C程序设计》第2章 简单程序设计 第21讲 二维数组与指针 指针与二维数组 #define M 2 #define N 3 … int b[M][N]; 两种观点: 看成一个一维数组 看成数组的数组 将二维数组看成一个一维数组 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)表示每一个数组元素。 填空题:求二维数组元素的和 #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 ;i3;i++) for(j=0; j4; j++) { sum+=p[ ]; } printf(“sum=%4d,sum); } 填空:输出二维数组元素的值 #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, ); } } 对比学习 如何进入S319 S(信科)?沿垂直方向上楼走至3楼?拐进三楼?沿水平方向走至第19号房间门口?拐进教室 如何找到a[i][j] a(二维数组首地址)?沿行方向至第i行?进入第i行?沿水平方向至第j列?取出数据 将二维数组看成数组的数组 指针与二维数组 指针与二维数组 b 代表二维数组的首地址,指向第0行的首地址(行地址) b+i 指向第i行的首地址(行地址) *(b+i) 或 b[i] 代表第i行第0列的地址(列地址) *(b+i)+j 或 b[i]+j 代表第i行第j列的地址(列地址) *(*(b+i)+j ) 或 b[i][j] 代表第i行第j列的元素(数组元素) 用数组名引用二维数组元素 元素b[i][j]的几种等价的引用方式 b[i] [j] *(b[i]+j) *(*(b+i)+j) (*(b+i)) [j] 二维数组与指针 用指针指向二维数组,有两种指针: 列指针,这种指针指向二维数组的每一个元素,它每加1,指向二维数组的下一个数组元素。 行指针,这种指针指向二维数组的行,它每加1,指向二维数组的下一行。 上边两种指针分别对应着对二维数组的两种看法。 二维数组的行指针 行指针指向二维数组的行 例:int (*p) [3]; 含义:定义一个指针变量p,用于指向一行(每行有3个元素) 定义格式 :类型 (*行指针名) [常量N]; 行地址与列地址的区别 读程序 #include string.h main() { int i, pos,findFlag = 0; char x[10]; char weekDay[7][10] = {Sunday,Monday,Tuesday, Wednesday,Thursday,Friday, Saturday}; char (*p)[10] =weekDay; printf(Please enter a string:); scanf(%s, x); for (i=0; i7 !findFlag; i++) { if (strcmp(x, *(p+i)) == 0) { pos = i; findFlag = 1; } } if (findFlag) printf(%s is %d\n, x, pos); else printf(Not found!\n); } 例题8-1 #include stdio.h void ave(float (*p)[3],int n); void main() { int num; float score[5][3]={{65,98,76},{78,69,87}

文档评论(0)

1亿VIP精品文档

相关文档