2011-12-02 59 views
5

所以我正在和我的朋友談話,幫她寫了一段代碼,我一直認爲數組需要是編譯時常量,因爲它們在堆棧中。但是她說她的朋友用這個代碼做了這個:在運行時確定大小的數組是否在C++中有效?

#include <iostream.h> 
#include <stdlib.h> 
int main() 
{ 
    int value = ' ' ; 
    int sum = 0; 
    int count = 0; 
    cout<<"Please enter the total number of employees" <<endl;; 
    cin>> value; 
    int numbers[value]; 
    cout<<"Now enter the employees corresponding salaries" <<endl;; 
    for (int k = 0; k < value; k++) 
    { 
     cin >> numbers[k]; 
    } 
} 

他們正在使用Dev-C++。

此代碼是否可以正常工作?我不假設。

+0

可能重複[有沒有辦法在C++中創建一個可變長度的數組全局?](http://stackoverflow.com/questions/3903232/is-there-any-way-to-make-a-variable -length-array-global-in-c) –

+1

是否有任何理由將她的'value'初始化爲''''?編譯器不會在意(它會將''''char轉換爲它的ASCII值,'32'),但32似乎是一個奇數,隨機數來初始化一個int。 –

+0

他們不是編碼員,只是普通的大學生。我無法告訴你爲什麼她選擇',\ n會很好。 – jValdron

回答

9

可變長度數組是gccg++的擴展......所以這在每個編譯器中都不起作用。

有關gcc對變長陣列的支持的更多信息,可以看到documentation here

4

我相信可變長度數組在C++中是官方不支持的,但某些編譯器和/或語言擴展實現它們。

如果你想要一個可變長度的數組,我推薦使用std :: vector。 你可以在這裏查看它的參考:

http://www.cplusplus.com/reference/stl/vector/

2
#include <iostream.h> 

^不是一個標準的頭。它曾經在1998年之前的標準時間之前在那裏。現代的Visual C++。

cin>> value; 
int numbers[value]; 

在C++標準化一年後的C99中引入了可變長度數組或者VLA。所以他們不是原來的標準C++的一部分,並且他們也很樂意在C++ 11中不被採用。除了這種野獸,還可以使用例如std::vectorvector標題或其他一些標準庫容器。

g ++支持可變長度數組作爲語言擴展。你最好關閉這樣的擴展。例如,

 
d:\dev\test> g++ foo.cpp 

d:\dev\test> g++ -pedantic -std=c++0x -Wall -O foo.cpp 
foo.cpp: In function 'int main()': 
foo.cpp:11: warning: ISO C++ forbids variable length array 'numbers' 
foo.cpp:7: warning: unused variable 'sum' 
foo.cpp:8: warning: unused variable 'count' 

d:\dev\test> _ 
0

我試着用GCC 4.6編譯它,發現你已經發布的代碼編譯成功。我也試着運行它,發現它工作,但我認爲代碼不是很好。