2010-11-19 15 views
1

diesen Code korrekt in C#statisches Array in C# vs C/C++

int x = int.Parse(Console.ReadLine()); 
     int[] t = new int[x]; 

aber in C/C++ in falschen

int n; scanf("%d",&n); int a[n]; 

wie in C# statisches Array zur Laufzeit zuteilen (oder in C# Array ist dynamisch?)

+9

Sie sollten Antworten auf Ihre Fragen akzeptieren. – SLaks

+1

So funktioniert SO. Sie stellen Fragen, wir beantworten sie nach besten Kräften. Wenn Sie eine Antwort erhalten, die Ihnen zusagt, klicken Sie auf den Aufwärtspfeil neben dieser Antwort. Eine der Antworten ist die beste Antwort für Ihre spezielle Situation. Sie sollten "Akzeptieren" als Antwort annehmen, indem Sie auf das Häkchen neben der Antwort klicken. Wenn Sie Antworten auffrischen oder annehmen, erhält der Beantworter "Reputationspunkte" für seine Leistung, die Währung, die die Website antreibt. Sie haben viele Fragen gestellt, aber keine Antworten akzeptiert. Bitte gehen Sie zurück und akzeptieren Sie die Antworten –

+0

Ich bin mir nicht sicher, ob ich verstehe, was Sie hier zu fragen versuchen. Könntest Du das erläutern? – Bryan

Antwort

4

C# -Arrays werden zur Laufzeit auf dem Heap zugewiesen.

C-Arrays werden zur Kompilierungszeit auf dem Stapel zugeordnet.
C kann Arrays auch zur Laufzeit unter Verwendung von malloc zuordnen. (Denken Sie daran, sie zu free wenn Sie fertig sind)

+3

"nur erinnern" ist ein Grund, warum viele Programmiersprachen erfunden wurden;) – Grozz

+1

Es sollte angemerkt werden, dass, wenn "Malloc" eher wenig Platz in C++ hat. (Es könnte interessant sein, wenn Sie wirklich wissen, was Sie tun und Sie Mikro-Optimierungen durchführen, ansonsten sollten Sie stattdessen 'new' verwenden.) Und Sie sollten wahrscheinlich auch keine nackten Arrays verwenden (außer Sie haben einen guten Grund). Die Tatsache, dass C++ (meistens) eine Obermenge von C ist, bedeutet in C++, dass Sie alles tun können, was Sie in C tun können, aber das sollten Sie wirklich nicht. – Jasper

3

in C++, müssten Sie tun:

int* a = new int[n]; 

// Do stuff with the array 

delete[] a; 
2

aber in C/C++ in falsch

int n; scanf("%d",&n); int a[n]

Nein! In C99 ist dieser Code korrekt, weil C99 Variable Length Arrays (VLAs) unterstützt.
In C++ ist der Code schlecht gebildet, weil die Array-Größe ein konstanter Ausdruck in C++ sein muss (obwohl g ++ VLA als Erweiterung unterstützt).

Verwandte Themen