2011-05-06 7 views
5

Estoy tratando de pasar una matriz bidimensional, cuyo tamaño puede ser dinámico, como un argumento de método.Cómo pasar una matriz bidimensional de tamaño desconocido como argumento de método

Dentro del método me gustaría usar la matriz con la sintaxis general de la matriz.

int item = array[row][column]; 

Para pasar la matriz no es posible, así que pensé en utilizar un puntero.

- (void)doSomethingWithArray:(int **)array columns:(int)nColumns rows:(int)nRows 
{ 
    int item = array[n][m]; 
} 

pero consigo el problema al intentar pasar la matriz como parámetro

int array[numberOfRows][numberOfColumns]; 

[someObject doSomethingWithArray:array columns:numberOfColumns rows:numberOfRows]; 

me encontré con un montón de consejos & trucos, pero de alguna manera nada realmente funciona de la manera que quisiera usarlo

Gracias por la ayuda, Eny

Respuesta

0
- (void)doSomethingWithArray:(void *)array columns:(int)nColumns rows:(int)nRows {} 
... 
[someObject doSomethingWithArray:&array columns:numberOfColumns rows:numberOfRows]; 
+0

pero en este caso no puedo acceder a la matriz en el estilo "array [x] [y]" ... si compilo esto, aparece el error "tipo de puntero incompatible". – Enyra

3

es objetivo-c basan en C99?

Si es así, puede utilizar la sintaxis "nueva" que le permite pasar información de dimensión directamente.

#include <stdio.h> 

void foo(int rows, int cols, int arr[rows][cols]) { 
    printf("%d, %d\n", arr[0][0], arr[1][4]); 
} 

int main(void) { 
    int arr[2][12] = {{1, 2, 3, 4, 5}, {11, 12, 13, 14, 15}}; 
    foo(2, 12, arr); 
} 

Puede ver el code running on ideone.

+0

Sí, Objective-C actualmente se basa en C99. Tu ejemplo estaría bien. – JeremyP

+0

Gracias por el aviso, @Jeremy – pmg

+0

ok Tengo que probar esto, pero aún no puedo asignarlo a una variable de clase, ya que todavía no conozco el tamaño en la interfaz de clase. – Enyra

Cuestiones relacionadas