Wie, um dynamische Zuweisung ein zwei-dimensionales array

Ich würde gerne ein zwei dimensionalen array in C.

Zum Beispiel, ich mache einen int-Typ ist die variable Ort wie diesem:

int *place;

Ich habe ein Spiel, welches die Variablen haben, wie Zeilen und Spalten.
Ich möchte meinen Platz Variablen, ein zweidimensionales array ist, mit der dynamischen Zuordnung von Zeilen und Spalten (für die max Größe des Arrays), die Aussehen würde, wie dies in der "normalen" Erklärung:

place[rows][columns];

aber ich weiß nicht, wie es mit der dynamischen Zuordnung.

Ich würde es tun, wie dies bei eindimensionalen arrays:

place = (int*) malloc (levels * sizeof(int));

aber ich weiß nicht, wie dies mit 2D-arrays.

Edit:

Wie kann ich diese umschreiben für char statt int?

Habe ich versucht, einfach überschreiben die int-Werte mit den chars, aber es funktioniert nicht.

  • Können Sie zeigen, was Sie versuchte, es zu benutzen für chars und sagen, wie es nicht funktioniert hat? Alle Antworten arbeiten unabhängig von der Basis-Typ, Sie müssen nur ersetzen Sie den Typ-Namen in die entsprechenden Orte.
  • Ich habe eine variable wie diese: char Ort; dann: (*place)[Spalten] = malloc(rows * sizeof *Ort); aber es funktioniert nicht, sagen conflicting types for Ort
  • Nein, die syntax (zugegeben, keine gute syntax, IMO) ist char (*place)[columns]; zu erklären place als Zeiger auf arrays von columns chars, ein char (*)[columns]. Sie können wie gewohnt initialisieren unverzüglich nach der Erklärung char (*place)[columns] = malloc(rows * sizeof *place);.
  • Ich habe es versucht, nun ist es zu sagen, dass element-Initialisierer ist nicht konstant. Ich habe versucht, die Zeilen und Spalten Konstanten, aber es ist nicht gut, weder.
  • Wenn es sich beschwert, dass die initialiser ist nicht konstant, das bedeutet, dass ein Objekt hat statische Speicher Dauer. Das ändert die Dinge. a) statische Objekte müssen Konstante Ausdrücke für initialisers, b) statische Objekte können nicht variabel modifizierten Arten. Wenn columns kann ein konstanter Ausdruck sein, können Sie noch erklären char (*place)[columns];, und 1. wenn es im Datei-Bereich, malloc im main, 2. wenn es hat die Funktion, den Geltungsbereich, die haben eine statische guard-variable und malloc beim Aufruf der Funktion wird zuerst aufgerufen. Wenn beide rows und columns werden kann Konstante Ausdrücke verwenden char place[rows][columns];.
  • Sie benötigen place statische Speicher Dauer? (Für einen pointer, das ist eher sinnlos.)
  • Ich habe eine Funktion, welche die gleichen Variablen. Ich nicht genau weiß, wie kann ich Ihnen übergeben zwischen Funktionen zu haben, da einige dieser Funktionen haben keine return-Wert.
  • Wenn eine dieser Funktionen aufruft, anderen, kann es ohne Probleme übergeben Sie das array als argument, wenn es empfangen, der es sich als einer. Deklarieren Sie es in die top-level-Anrufer, und übergeben Sie Sie als argument an, welche Funktionen muss das array.

InformationsquelleAutor Zwiebel | 2012-12-01
Schreibe einen Kommentar