Странно объединять массивы C и NSArrays, но это можно сделать:
NSMutableArray *myArrays[];
myArrays = malloc(sizeof(NSMutableArray *) * numberOfArrays);
Лучшим решением будет использование NSArray из NSArrays;
NSMutableArray *rows = [NSMutableArray array];
[rows addObject: [NSMutableArray array]];
[rows addObject: [NSMutableArray array]];
[rows addObject: [NSMutableArray array]];
NSMutableArray *row0 = [rows objectAtIndex: 0];
[row0 addObject: [Datum new]];
[row0 addObject: [Datum new]];
[row0 addObject: [Datum new]];
.... и т.д ....
Или просто используйте массив указателей напрямую:
Datum **my2DArray = malloc(sizeof(Datum *) * width * height);
Тогда любая данная декартова координата в пределах my2DArray
является простым кусочком математики:
my2DArray[ x + (y * width) ] = ....;
Это эффективно преобразует любую данную (x, y) координату в линейный индекс (фактически, y становится шагом, а x становится смещением внутри шага).