猪冰龙

导航

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 }

 

posted on 2017-10-02 11:12  猪冰龙  阅读(9938)  评论(0编辑  收藏  举报