将二维C样式数组传递给Objective C方法

时间:2011-07-15 08:11:14

标签: objective-c pass-by-reference

.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在警告之后被调用时,应用程序崩溃

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

2 个答案:

答案 0 :(得分:5)

参数需要采用int [] [5]数组,原因是编译器需要知道列数才能正确识别成员的位置。如果总是采用相同大小的数组,也可以指定int [10] [5]作为参数类型。

答案 1 :(得分:0)

虽然可能有其他错误,但我看到的是

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

您没有将初始值设置为ij。 <{1}}和i可能是任何垃圾值。

j