передача двумерного массива в стиле C в метод Objective C - PullRequest
2 голосов
/ 15 июля 2011

.h файл

@interface GameState :NSObject{
int SymbolsPositions[3][5];
}
-(void)SaveCurrentGameState:(int **)Array;
@end


@interface GameViewController : UIViewController 
{
  ...
 int sequence_after_spin[3][5];
  ...
}
-(Void)AMethod;
@end

.m файл

@implementation GameState
-(void)SaveCurrentGameState:(int **)Array
{   
    for(int i = 0;i<5;i++)
     for(int j = 0;j<3;j++)
       NSLog(@" %d",Array[j][i]);
}
 @end


@implimentation GameViewController
-(void)AMethod
 {
   [instanceOfGameState SaveCurrentGameState:sequence_after_spin];
  }
@end

приложение аварийно завершает работу, когда когда-либо вызывается AMethod, iget после предупреждения

warning: incompatible pointer types sending 'int [10][5]' to parameter of type 'int **' [-pedantic]

Ответы [ 2 ]

5 голосов
/ 15 июля 2011

Аргумент должен принимать массив int [] [5], причина этого в том, что компилятору нужно знать количество столбцов, чтобы правильно определить, где находятся члены. Вы также можете указать int [10] [5] в качестве типа параметра, если вы всегда берете массив одинакового размера.

0 голосов
/ 15 июля 2011

Хотя могут быть и другие ошибки, я вижу, что

for(int i;i<5;i++)
    for(int j;j<3;j++)
        NSLog(@" %d",Array[j][i]);

Вы не устанавливаете начальное значение i и j.i и j может быть любым значением мусора.

for(int i = 0;i<5;i++)
    for(int j = 0;j<3;j++)
        NSLog(@" %d",Array[j][i]);
...