(Edit: put mögliche Lösung am Ende) erstellenmalloc Unter Verwendung ein 2D-C-Stil-Array meiner Klasse
Ich bin ein C/C++ Programmierer, Objective C lernen iPhone-Apps zu entwickeln. Die Programme, die ich schreiben werde, befassen sich mit großen 2-D-Arrays von Objekten. Ich habe gelesen, dass ich NSArray's von NSArray benutze und über funktionierenden Code verfüge, aber ich versuche zu verstehen, wie man C-Stil-Arrays benutzt, um Overhead zu sparen und zu lernen, was man tun kann und was nicht.
In diesem Fragment enthält MapClass nur zwei Eigenschaften int x und int y. Ich habe das folgende Codefragment, das mit einem statisch definierten Array von 10 x 10 arbeitet.
MapClass *arr[10][10];
arr[2][3] = [[MapClass alloc] init];
arr[2][3].x = 2;
arr[2][3].y = 3;
NSLog(@"The location is %i %i", arr[2][3].x, arr[2][3].y);
// Output: "The location is 2 3"
Dies ist ein Beispiel davon mit einem eindimensionalen Array tun und Berechnung, wo die Zelle auf der X- und Y-basiert:
MapClass **arr = (MapClass**) malloc(10 * 10 * sizeof(MapClass *));
arr[3 * 10 + 2] = [[MapClass alloc] init];
arr[3*10 + 2].x = 2;
arr[3*10 + 2].y = 3;
NSLog(@"The location is %i %i", arr[3*10 + 2].x, arr[3*10 + 2].y);
// Output: "The location is 2 3"
Meine Frage dies ist: Wie kann ich malloc mein Array als zweidimensionales Array, damit ich die arr [2] [3] Style-Notation verwenden kann, um darauf zuzugreifen?
Alles, was ich versuche, erzeugt verschiedene Fehler wie "Tiefgestellt erfordert die Größe von [Ihrer Klasse], die in nicht zerbrechlichen ABI nicht konstant ist".
Kann mir jemand einen Tipp geben, wie man das macht? Ich habe gelesen und experimentiert und kann es nicht herausfinden. Kann ich mit meinem eindimensionalen Array etwas falsch machen?
Antwort?
Nach herumalbern mit Xzgyb's Antwort, habe ich den folgenden Block arbeiten. Irgendetwas stimmt nicht damit? Vielen Dank!
int dimX = 20;
int dimY = 35;
MapClass ***arr = (MapClass***) malloc(dimX * sizeof(MapClass **));
for (int x = 0; x < dimX; ++x)
{
arr[x] = (MapClass **) malloc(dimY * sizeof(MapClass*));
}
for (int x = 0; x < dimX; ++x)
{
for (int y = 0; y < dimY; ++y)
{
arr[x][y] = [[MapClass alloc] init];
arr[x][y].x = x;
arr[x][y].y = y;
}
}
for (int x = 0; x < dimX; ++x)
{
for (int y = 0; y < dimY; ++y)
{
NSLog(@"%i %i is %i %i", x, y, arr[x][y].x, arr[x][y].y);
}
}
// Cleanup
for (int x = 0; x < dimX; ++x) {
for (int y = 0; y < dimY; ++y) {
[arr[x][y] release];
}
}
for (int x = 0; x < dimX; ++x)
{
free(arr[x]);
}
free(arr);
Das ist keine Antwort auf Ihre Frage, aber ich möchte beachten, dass Sie nicht verwendet haben 'malloc' hier zu beginnen. –
Ja, das Fragment ist statisch zugewiesen und funktioniert. Ich möchte wissen, wie man es mit malloc dynamisch zuordnet. – user1316642
Oh, ich verstehe. Danke für die Klarstellung! –