6.4.1指针与二维数组 1、二维数组结构的分析 设有数组定义为:int a[3][4]; 则有: a表示数组在内存中的首地址。 a+i=a[i]=&a[i][0] 代表第i行的首地址 不讲 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
6.4.1指针与二维数组 a[0][3] a[0][2] a[0][1] a[0][0] a[1][3] a[1][2] a[1][1] 二维数组的逻辑结构图如下: a[0][3] a[0][2] a[0][1] a[0][0] a[1][3] a[1][2] a[1][1] a[1][0] a[2][3] a[2][2] a[2][1] a[2][0] a[0] a[1] a[2] a+0 a+2 a+1 不讲 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
6.4.1指针与二维数组 【例6-16】输出二维数组有关值 #include <stdio.h> main( ) { int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11}; printf("%d,",a); //第0行首地址 printf("%d,",a[0]); //第0行0列地址 printf("%d\n",&a[0][0]); //第0行0列地址 printf("%d,",a+1); //第1行首地址 printf("%d,",*(a+1)); //第1行0列地址 printf("%d,",&a[1]); printf("%d\n",&a[1][0]); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
6.4.1指针与二维数组 【例6-17】用指针变量输出数组元素。 #include <stdio.h> main( ) { int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11}; int i,*p=a[0]; for(i=0;i<12;i++,p++) printf("%5d",*p); if ((i+1)%4==0) printf("\n"); } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
6.4.2 指向指针的指针 如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。 定义格式: 6.4.2 指向指针的指针 如果一个指针变量存放的又是另一个指针变量的地址,则称这个指针变量为指向指针的指针变量。 定义格式: 类型标识符 **指针变量名 如:char **p; 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
6.4.2 指向指针的指针 【例6-18】在例6-11的基础上,我们对源程序做以下修改。 #include<stdio.h> 6.4.2 指向指针的指针 【例6-18】在例6-11的基础上,我们对源程序做以下修改。 #include<stdio.h> main( ) { static char *name[]={ "Illegal day", "Monday","Tuesday","Wednesday","Thursday", "Friday", "Saturday","Sunday"}; char **ps; //定义一个指向字符指针变量的指针变量ps int i; printf("input Day No:\n"); scanf("%d",&i); if(i<0) exit(1); ps=name+i; //为ps赋值 printf("Day No:%2d-->%s\n",i,*ps); //输出 } 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
6.4.2 指向指针的指针 name是一个指针数组,它的每一个元素是一个指针型数据,其值为地址。name是一个数组,它的每一个元素都有相应的地址。数组名name代表该指针数组的首地址。其中当i=1时,name[i]是"Monday"的首地址,ps=name+i是name[i]的地址,所以ps就是指向指针型数据的指针变量。输出时的“*ps”表示*(name+i),即name[i]。 浙江长征职业技术学院—计算机与信息技术系—相方莉制作
double *c[3]={a[0],a[1],a[2]}; int i,j; #include <stdio.h> #include <math.h> double f(double **x,int m,int n) { double max; int i,j; for(i=0;i<m;i++) { max=x[i][0]; for(j=1;j<n;j++) if(fabs(x[i][j])>fabs(max)) max=x[i][j]; for(j=0;j<n;j++) x[i][j]/=max; } void main() { FILE *fp; double a[3][3]={{1.3,2.7,3.6},{2,3,4.7},{3,4,1.27}}; double *c[3]={a[0],a[1],a[2]}; int i,j; /****考生在以下空白处写入执行语句******/ /****考生在以上空白处写入执行语句******/ fp=fopen("CD2.dat","wb"); fwrite(*a+8,8,1,fp); fclose(fp); } f(c,3,3); for(i=0;i<3;i++) { for(j=0;j<3;j++) printf("%lf ",a[i][j]); } printf("\n"); 浙江长征职业技术学院—计算机与信息技术系—相方莉制作