#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~
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]
.
Nawaz
Das ist die C99-Funktion, die VLA (Array mit variabler Länge) ermöglicht.
Kompilieren Sie es mit g++ -pedantic
ich bin sicher, das würde nicht kompilieren.
9890200cookie-checkIn C++-Büchern muss die Array-Grenze ein konstanter Ausdruck sein, aber warum funktioniert der folgende Code?yes
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 Tatstd::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