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 }
![]()