1. 程式人生 > >C語言三種方法調用數組

C語言三種方法調用數組

技術 png 順序 特性 logs 元素 %d img etc

 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 }

技術分享

C語言三種方法調用數組