In C++-Büchern muss die Array-Grenze ein konstanter Ausdruck sein, aber warum funktioniert der folgende Code?

Lesezeit: 1 Minute
#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;
}

funktionierte gut in Xcode4 unter Mac

Wie in Büchern gesagt, sollte es falsch sein, warum?

so verwirrt~

  • Um dies standardkonform zu tun, würden Sie alloca() verwenden.

    – Jaspis Bekkers

    10. Mai 2011 um 9:49 Uhr

  • alloca() ist auch kein Standard-C++. Die Standardmethode ist in der Tat std::vector<int> a(n)

    – MSalter

    15. März 2013 um 12:01 Uhr

  • Dass es “funktioniert” bedeutet nicht, dass es nicht falsch ist 🙂 char* ptr = "lol"; *ptr = 'a'; manchmal “funktioniert” auch.

    – Leichtigkeitsrennen im Orbit

    5. April 2013 um 12:50 Uhr


  • @LightnessRacesinOrbit, das hat mich daran erinnert, wie ich gelernt habe, Const-Strings nicht auf sehr, sehr schmerzhafte Weise zu ändern 🙂

    – holgac

    2. Mai 2013 um 12:23 Uhr

  • Für viel mehr Details siehe auch Does „int size = 10;“ einen konstanten Ausdruck liefern?

    – Shafik Yaghmour

    16. März 2017 um 17:46 Uhr

Diese aa C99-Funktion wird aufgerufen VLA die einige Compiler auch in C++ zulassen. Es ist eine Zuweisung auf dem Stack, genau wie bei int a[10].

In C Buchern muss die Array Grenze ein konstanter Ausdruck sein aber
Nawaz

Das ist die C99-Funktion, die VLA (Array mit variabler Länge) ermöglicht.

Kompilieren Sie es mit g++ -pedanticich bin sicher, das würde nicht kompilieren.

  • Brauchen Sie vielleicht auch -std=c++98 oder -ansi.

    – James Kanze

    10. Mai 2011 um 9:10 Uhr

989020cookie-checkIn C++-Büchern muss die Array-Grenze ein konstanter Ausdruck sein, aber warum funktioniert der folgende Code?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy