7 Stimmen

Rückgabe eines 2D-C-Arrays aus einer Objective-C-Funktion

Ich möchte in Objective-C so etwas wie das folgende erreichen

+(int[10][10])returnArray
{
    int array[10][10];
    return array;
}

Dies führt jedoch zu einem "Array-Initialisierer muss eine Initialisierungsliste sein" Compilerfehler. Ist dies überhaupt möglich?

9voto

Carl Norum Punkte 210051

Sie können in C oder Objective-C kein Array (beliebiger Dimension) zurückgeben. Da es sich bei Arrays nicht um I-Werte handelt, können Sie den Rückgabewert nicht einer Variablen zuweisen, so dass so etwas nicht sinnvoll ist. Sie können das Problem jedoch umgehen. Sie müssen einen Zeiger zurückgeben oder einen Trick anwenden, um Ihr Array in eine Struktur zu packen:

// return a pointer
+(int (*)[10][10])returnArray
{
    int (*array)[10][10] = malloc(10 * 10 * sizeof(int));
    return array;
}

// return a structure
struct array {
  int array[10][10];
};

+(struct array)returnArray
{
   struct array array;
   return array;
}

1voto

Jasper Blues Punkte 27710

Eine andere Möglichkeit, dies mit Objective C++ zu tun, besteht darin, das Array wie folgt zu deklarieren:

@interface Hills : NSObject
{

@public
    CGPoint hillVertices[kMaxHillVertices];
}

Das bedeutet, dass das Array im Besitz der Instanz der Klasse Hills ist - d.h. es verschwindet, wenn die Klasse verschwindet. Sie können dann von einer anderen Klasse wie folgt zugreifen:

_hills->hillVertices 

Ich bevorzuge die Techniken, die Carl Norum beschreibt, wollte dies aber als eine Option vorstellen, die in einigen Fällen nützlich sein könnte - zum Beispiel, um Daten in OpenGL von einer Builder-Klasse zu übergeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X