c++運行時決定數組大小 variable-length array


本文由Suzzz原創,發布於 http://www.cnblogs.com/Suzzz/p/4117431.html,轉載請保留此聲明

 

variable-length array是C99添加的一個特性,即數組的長度可以在運行時(run time)決定,而不是在編譯時(compile time)。即,定義數組時不一定要使用 const int, 也可以使用變量、函數返回值等。 例如

1 int main(){
2     int a=5, b=6;
3     int arr1[a];
4     int arr2[ min(a,b) ];
5     int arr3[ rand()%10 ];      
6 
7 }

這些定義數組的方式都是合法的。

  

不過,這種聲明方式好像只適用於局部變量,全局變量是不行的。下面的用法會報錯。

int a=100;
int b[a];

int main(){
    return 0;
}

 

允許運行時決定數組大小會帶來很多方便。

不過,在C11標准時,variable-length array變成了一個可選的特性,不要求編譯器必須實現。筆者測試了手頭可用編譯器的默認支持情況。這些編譯器的其他版本,以及一些其他編譯器的支持情況,由於手頭沒有,也就沒測試。

編譯器 是否支持variable-length array
gcc 4.8 支持
clang 3.4 支持
visual studio 2012 不支持
visual studio 2013 不支持

 

本文只是從學習知識的角度記錄一下variable-length array這一特性,由於不是標准特性,還是不要太過依賴。尤其一些可能要跨平台的代碼,要慎重使用。

另外,看很多地方翻譯為 “變長數組”, 其實不是很合適,這和其他語言中的可變長度數組還是不同的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM