文档详情

第04章 函数与程序结构资料.ppt

发布:2018-04-06约2.09万字共110页下载文档
文本预览下载声明
4.1.4 数组参数传递函数调用 使用二维数组名作为实参 用二维数组名作为函数参数实现的是“传地址值调用”,其本质是实参数组将它的全部存储区域提供给形参数组共享,即形参数组与实参数组是同一存储区域。 实参a 形参b[3][5] 图4.9 实参为二维数组名 例4.10 程序演示 4.1.4 数组参数传递函数调用 使用二维数组起始地址的一级地址形式作为实参 在实际程序设计中,有时需要函数能够处理任意行列长度的二维数组,则用二维数组作为形参的设计形式就不适合。 为了编制较为通用的函数,可使用二维数组作为实参,一维数组作为形参。如图4.10所示: 实参a[0] … 形参b[] 形参数组b本质上是指针变量 图4.10 形参数组与实参数组全部共享存储区域 4.1.4 数组参数传递函数调用 实现参数传递时的注意点: ①函数调用的实参必须是一级地址形式,同时将二维数组的行数和列数传递到被调函数中。 ②在被调函数中将传递来的二维数组当作一维数组处理。其元素对应关系如下: a[i][j]→v[i*n+j] 例4.11 程序演示 int a[3][4] int v[12] a[0][0] a[0][1] a[0][2] a[0][3] v[0] a[1][0] a[1][1] a[1][2] a[1][3] v[1] a[2][0] a[2][1] a[2][2] a[2][3] v[2] v[3] v[4] v[5] v[6] v[7] …… v[11] a[i][j]→v[i*n+j] a[1][2] v[1*4+2] ? v[6] a[0][0] *a a平面起始地址(二级地址) “布雷”游戏图解 int a[11][11]={0}; 随机布上10个雷 int a[11][11]={0}; int n=10; for(k=1;k=n;k++) /*随机布10个地雷*/ { i=rand()%9+1; j=rand()%9+1; a[i][j]=9; } 以每个雷为中心,与它相邻的格子都要加1 最极端的: 如果a[i][j]是个雷,则:  if(a[i][j]8) { a[i-1][j-1]++; a[i-1][j]++; a[i-1][j+1]++; a[i][j-1]++; a[i][j+1]++; a[i+1][j-1]++; a[i+1][j]++; a[i+1][j+1]++; } { a[i-1][j-1]++; a[i-1][j]++; a[i-1][j+1]++; a[i][j-1]++; a[i][j+1]++; a[i+1][j-1]++; a[i+1][j]++; a[i+1][j+1]++; } 剪裁掉边沿后得到9×9矩阵 for(i=1;i10;i++) { for(j=1;j10;j++) { if(a[i][j]8) /*该处是雷*/ printf(%4c,9); else prin
显示全部
相似文档