程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 變長數組(VLA)的原型寫法、聲明位置及變長數組的本質,vla原型

變長數組(VLA)的原型寫法、聲明位置及變長數組的本質,vla原型

編輯:關於C語言

變長數組(VLA)的原型寫法、聲明位置及變長數組的本質,vla原型


  變長數組(variable-length array)是C語言C99標准中新增加的內容,此處所謂的“變”並非在說該類型的數組在創建後可修改大小,變長數組的大小在創建後也是不能修改的。那為什麼此處稱為“變長”呢,是因為變長數組的維可以用變量來指定。這一點特性彌補了C99之前的變量維度只能用常量或常量表達式指定的不足。

  變長數組是有一些限制的,變長數組只可在函數內部或作為函數參數聲明。並且在聲明是不能初始化。

  來看一個例子:

  編寫一個程序,初始化一個3x5的二維double數組,並利用一個基於變長數組的函數把該數組復制到另一個二維數組。還要編寫一個基於變長數組的函數來顯示兩個數組的內容。這兩個函數應該能夠處理任意的NxM數組。

 1 #include <stdio.h>
 2 
 3 void copy(int row,int col, double arr[][col],double tar[row][col]);
 4 void show(int,int,double arr[*][*]);
 5 
 6 int main(void){
 7     
 8     double num[3][5]={
 9         {2.3,1.2,5.2,6.1,1.1},
10         {4.2,3.2,6.2,1.7,7.4},
11         {8.5,6.2,4.7,2.8,2.1}
12     };
13     
14     double rain[5][12]={
15         {4.3,4.3,4.3,3.0,2.0,1.2,0.2,0.2,0.4,2.4,3.5,6.6},
16         {8.5,8.2,1.2,1.6,2.4,0.0,5.2,0.9,0.3,0.9,1.4,7.3},
17         {9.1,8.5,6.7,4.3,2.1,0.8,0.2,0.2,1.1,2.3,6.1,8.4},
18         {7.2,9.9,8.4,3.3,1.2,0.8,0.4,0.0,0.6,1.7,4.3,6.2},
19         {7.6,5.6,3.8,2.8,3.8,0.2,0.0,0.0,0.0,1.3,2.6,5.2}
20     };
21     
22     double tar[3][5]={0};
23     double tar2[5][12]={0};
24     
25     copy(3,5,num,tar);
26     show(3,5,tar);
27 
28     copy(5,12,rain,tar2);
29     show(5,12,tar2);
30     
31     return 0;
32 }
33 
34 void copy(int row,int col,double arr[][col],double tar[row][col]){
35     int i,j;
36     for(i=0;i<row;i++){
37         for(j=0;j<col;j++){
38             tar[i][j]=arr[i][j];
39         }
40     }
41 }
42 
43 void show(int row,int col,double arr[row][col]){
44     int i,j;
45     for(i=0;i<row;i++){
46         for(j=0;j<col;j++){
47             printf("%.1f",arr[i][j]);
48             if(j!=col-1)printf(", ");
49         }
50         printf("\n");
51     }
52     printf("--------------------------------------\n\n");
53 }

  在這個例子中,給定兩個二維數組,一個3X5數組和一個5X12數組,而例子中這兩個數組用同一個函數處理拷貝或用同一個函數顯示。

  其中用於顯示的函數:

void show(int row,int col,double arr[row][col])

  是一個變長數組的定義方法,將代表維的整數聲明在使用該維的變長數組之前。因為在原型中可以省略變量名,所以原型可以寫為:

void show(int,int,double arr[*][*])

 

 

 

  未完待續……

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved