2011-05-10 11 views
7
#include <iostream> 
using namespace std; 

int main(){ 
    int n=10; 
    int a[n]; 

    for (int i=0; i<n; i++) { 
     a[i]=i+1; 
     cout<<a[i]<<endl; 
} 
    return 0; 
} 

मैकसी ++ किताबों में, सरणी बाध्य निरंतर अभिव्यक्ति होना चाहिए, लेकिन निम्न कोड क्यों काम करता है?

तहत Xcode4 में ठीक काम के रूप में पुस्तकों में कहा, यह गलत होना चाहिए, क्यों?

तो उलझन ~

+0

यह मानक अनुपालन में ऐसा करने के लिए आप alloca() –

+2

'alloca() 'मानक सी ++ का उपयोग नहीं करेंगे। मानक विधि वास्तव में 'std :: vector a (n)' – MSalters

+0

है कि यह "काम करता है" इसका मतलब यह नहीं है कि यह गलत नहीं है :) 'char * ptr =" lol "; * पीआरटी = 'ए'; 'कभी-कभी "काम करता है"। –

उत्तर

6

यह एक एक C99 सुविधा कहते हैं VLA जो कुछ compilers भी सी में अनुमति देने के ++। यह ढेर पर आवंटन है, जैसा कि यह int a[10] के साथ होगा।

4

वह सी 99 सुविधा है जो वीएलए (चर लंबाई लंबाई सरणी) की अनुमति देती है।

इसे g++ -pedantic के साथ संकलित करें, मुझे यकीन है कि संकलित नहीं होगा।

+1

आपको '-std = C++ 98' या' -ansi' की भी आवश्यकता हो सकती है। –

संबंधित मुद्दे

 संबंधित मुद्दे