¿Suscribir punteros indistintamente con una matriz 2D en Objective-C?
Frecuentes
Visto 139 veces
0
Tengo una matriz declarada estáticamente como esta Cell SMatrix_A[36][10]
. Cuando uso SMatrix_A directamente en mi código (Cell foo = SMatrix_A[12][8]
), todo funciona bien. Sin embargo, lo que realmente quiero es declarar varias de estas matrices (SMatrix_A, SMatrix_B, etc.) y luego tener una variable de puntero que cambie entre ellas en tiempo de ejecución.
Me imagino un código como este (suponiendo que SMatric_A, B, C ya están declarados y todo esto está en el mismo alcance de archivo):
Cell *curMatrix = SMatrix_B;
Cell foo,bar;
...
foo = curMatrix[13][2];
El compilador me da un: Incompatable pointer types assigning 'Cell*' from 'Cell[36][10]'
en la asignación inicial a curMatrix. Pensé que referirme a una variable de matriz sin subíndices me daría un tipo de puntero con el valor como la primera ubicación de la matriz.
¿Solo me falta un yeso o algo?
1 Respuestas
3
Mi respuesta anterior es totalmente incorrecta, ¡así que le daré otra oportunidad!
#import <Foundation/Foundation.h>
typedef int matrix_t[3][3];
matrix_t matrix = { { 1, 2, 3}, { 4, 5, 6}, { 7, 8, 9} };
int main(int argc, char *argv[])
{
matrix_t *matrixPtr = &matrix;
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 3; j++)
{
NSLog(@"%i", (*matrixPtr)[i][j]);
}
}
return 0;
}
Debe escribir su tipo de matriz 2D (es probable que sea una buena idea para que su SMatrix_A, SMatrix_B tengan el mismo tamaño). Luego puede crear punteros a él como de costumbre. Tenga en cuenta que debe eliminar la referencia del puntero antes de indexarlo.
Respondido 26 ago 12, 16:08
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas objective-c pointers casting static-array or haz tu propia pregunta.
Ahora eso suena mejor, +1. Mientras tanto, elimine su respuesta incorrecta; recuperará la reputación -2 :) - user529758
¡Eh! Supe esto en algún momento, pero dejé de pensar porque asumí que Objective-C era de alguna manera diferentes matrices wrt o typedefs. Sigo olvidando que puedo hacer trucos regulares de C con él. ¡Debería haber recordado que necesito typedefs para cualquier cosa más complicada que una matriz 1d! - kbyrd