变长数组必须是自动存储类,声明时不可以进行初始化。

变长数组不表示创建后可以修改大小,而是指其维大小可以用变量来指定

将变长数组作为参数的函数,必须先声明rows和cols

变长数组允许动态分配存储单元,即程序运行时指定数组大小,普通数组是静态存储,编译时分配大小。

 

  1. #include<stdio.h> 
  2. #define ROWS 3 
  3. #define COLS 4 
  4.  
  5. int sum2d(int rows,int cols,int ar[rows][cols]); 
  6.  
  7. int main(void){ 
  8.     int i,j; 
  9.     int rs = 3; 
  10.     int cs = 10; 
  11.     int junk[ROWS][COLS] = { 
  12.         {2,4,6,8}, 
  13.         {3,5,7,9}, 
  14.         {12,10,8,6} 
  15.     }; 
  16.     int morejunk[ROWS-1][COLS+2] = { 
  17.         {20,30,40,50,60,70}, 
  18.         {5,6,7,8,9,10} 
  19.     }; 
  20.     int varr[rs][cs]; 
  21.      
  22.     for(i=0;i<rs;i++){ 
  23.         for(j=0;j<cs;j++){ 
  24.             varr[i][j] = i * j + j; 
  25.         } 
  26.     } 
  27.     printf("3*4array\n"); 
  28.     printf("Sum of all elements = %d\n",sum2d(ROWS,COLS,junk)); 
  29.      
  30.     printf("2*6array\n"); 
  31.     printf("Sum of all elements = %d\n",sum2d(ROWS-1,COLS+2,morejunk)); 
  32.  
  33.     printf("3*10array\n"); 
  34.     printf("Sum of all elements = %d\n",sum2d(rs,cs,varr)); 
  35.      
  36.     getchar(); 
  37.     return 0; 
  38.  
  39. int sum2d(int rows,int cols,int ar[rows][cols]){ 
  40.     int r; 
  41.     int c; 
  42.     int tot = 0; 
  43.      
  44.     for(r=0;r<rows;r++){ 
  45.         for(c=0;c<cols;c++){ 
  46.             tot += ar[r][c]; 
  47.         } 
  48.     } 
  49.     return tot;