2012-01-07 14 views

Respuesta

8

No puede devolver una matriz (de cualquier dimensión) en C o en Objective-C. Como las matrices no son lvalues, no sería posible asignar el valor de retorno a una variable, por lo que no tiene sentido que tal cosa suceda. Sin embargo, puedes evitarlo. Tendrá que devolver un puntero, o tirar de un truco como poner la matriz en una estructura:

// 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; 
} 
+0

Al observar ese código, parece que utilizo 'array' en muchos espacios de nombres diferentes. Lo limpiaré si crees que es confuso. –

+0

Al usar el método struct, ¿cómo accedo a struct como una matriz 2d? Por ejemplo, cuando hago 'int i = array [0] [1]' I get "el valor subíndice no es una matriz, puntero o vector" – RSH1

+0

Debe acceder al miembro de la estructura. 'int i = array.array [0] [1]' debería hacerlo por usted. –

1

Otra forma puede hacerlo con objetivo C++, es declarar la matriz de la siguiente manera:

@interface Hills : NSObject 
{ 


@public 
    CGPoint hillVertices[kMaxHillVertices]; 
} 

Esto significa que la matriz es propiedad de la instancia de la clase Hills, es decir, desaparecerá cuando la clase lo haga. A continuación, puede acceder de otra clase de la siguiente manera:

_hills->hillVertices 

que prefieren las técnicas Carl Norum describe, pero quería presentar esto como una opción que puede ser útil en algunos casos - por ejemplo, para transmitir datos en OpenGL de una clase de constructor

Cuestiones relacionadas