好的,所以我正在使用包含位置结构的c风格的二维数组创建一个地图:
typedef struct{
int x;
int y;
} posn;
我上传了正确的值并打印出来以确保值正确。 2d数组作为实例变量存储在我的类中。
在我的下一个函数中,我首先打印数组以确保它是相同的,但事实并非如此。 价值观完全不同,阵列甚至缩短了。任何人都可以告诉我为什么我会遇到这个问题。我正在使用结构和c样式数组,因为我正在设计一个游戏,我认为使用它们会比NSMutableArray更快。
这就是我填充数组的方式
mapa_camino = (posn *)malloc(w * h * sizeof(posn));
int i, j = 0;
for (i = 0; i < w; i++){
for (j = 0; j < h; j++){
SKNode *act;
act = [self.main_view nodeAtPoint:CGPointMake(i-algorimo_compensado.x, j-algorimo_compensado.y)];
if([act isKindOfClass:[BasicActor class]] && ![act isKindOfClass:[CMActor class]]){
//crea pt
posn pt = {.x = i,
.y = j,
.ocupado = YES,
.visitado = NO};
//fija posicion actual como pt
*(mapa_camino + i*h + j) = pt;
}else{
posn pt = {.x = i,
.y = j,
.ocupado = NO,
.visitado = NO};
*(mapa_camino + i*h + j) = pt;
}
}
}
这是我打印它的方式:
- (NSMutableArray*) printtwodarray:(posn*)matriz{
int array_w = self.frame.size.width;
int array_h = self.frame.size.height;
NSMutableArray* regresa_matriz = [[NSMutableArray alloc] initWithCapacity:array_w];
for(int i=0;i<array_w;i++){
[regresa_matriz addObject:[[NSMutableArray alloc] initWithCapacity:array_h]];
for(int j=0;j<array_h;j++){
posn *pt = (matriz + i*array_h + j);
[[regresa_matriz objectAtIndex:i] insertObject:[[Posn alloc] initWithX:pt->x Y:pt->y H:pt->h G:pt->g Ocupado:pt->ocupado Goal:pt->is_goal] atIndex:j];
}
}
return regresa_matriz;
}
答案 0 :(得分:0)
为了将2D数组存储在一个函数的实例变量中并在另一个函数中使用它,您需要将变量声明为数组,而不是指针。分配不起作用,因此您需要使用memcpy
初始化数据:
@interface Foo : NSObject {
posn p[20][30];
}
@end
...
-(void)bar {
posn d[20][30] = {{...}, {...},...,{...}};
memcpy(p, d, sizeof(p));
}