C语言三种方法调用数组
1 #include <stdio.h> 2 /********************************* 3 * 方法1: 第一维的长度可以不指定 * 4 * 但必须指定第二维的长度 * 5 *********************************/ 6 void print_a(double a[][5], int n, int m) 7 { 8 int i, j; 9 10 for(i = 0; i < n; i++) 11 { 12 for(j = 0; j < m; j++) 13 { 14 printf("%lf ", a[i][j]); 15 } 16 17 printf("\n"); 18 } 19 //printf("%d ", a[1][0]+a[2][0]);//输出3+6, 20 //a[4][4]=a[1][0]+a[2][0]; //即验证是不是真能直接操作数组,答案是可以 21 } 22 /************************************************************** 23 *方法2: int (*a)[5]是指向一个一维数组(有5个int型元素)的指针,* 24 *因为原数组每行有5个元素,故int (*a)[5]中必须为5 * 25 **************************************************************/ 26 void print_b(double (*a)[5], int n, int m) 27 { 28 int i, j; 29 30 for(i = 0; i < n; i++) 31 { 32 for(j = 0; j < m; j++) 33 printf("%lf ", a[i][j]); 34 35 printf("\n"); 36 } 37 } 38 /*********************************** 39 *方法3: 利用数组是顺序存储的特性, * 40 * 通过降维来访问原数组! * 41 ***********************************/ 42 void print_c(double *a, int n, int m) 43 { 44 int i, j; 45 46 for(i = 0; i < n; i++) 47 { 48 for(j = 0; j < m; j++) 49 printf("%lf ", *(a + i*m + j)); 50 51 printf("\n"); 52 } 53 54 } 55 int main(void) 56 { 57 double a[5][5] = {{1.0, 2.0}, {3.0, 4.0, 5.0}, {6.0}, {7.0}, {0.0, 8.0}}; 58 59 printf("\n方法1:\n"); 60 printf("输出a:%lf\n",a); 61 print_a(a, 5, 5); 62 printf("%lf ", a[1][0]+a[2][0]);//输出3+6, 63 printf("%lf ", a[1][0]+a[2][0]);//输出3+6 64 65 66 67 printf("\n方法2:\n"); 68 printf("输出a:%lf\n",a); 69 print_b(a, 5, 5); 70 71 printf("\n方法3:\n"); 72 printf("输出&a[0][0]:%lf\n",&a[0][0]); 73 printf("输出&a:%lf\n",&a); 74 printf("输出a:%lf\n",a); 75 print_c(&a[0][0], 5, 5); //&a是会警告的,&a[0][0]才最好 76 77 getchar(); 78 return 0; 79 }