Существует библиотека TimeZone общественного достояния для.NET . Действительно полезный. Это ответит на Ваши потребности.
Решение проблемы часового пояса общего случая более трудно, чем Вы думаете.
Я бы написал это так:
- (void) testCall: (int *) aMatrice;
Это позволяет избежать множественных маллоков, а математика для вычисления единственного смещения в линейном массиве на основе координат x, y в 2D-массиве банально. Он также позволяет избежать множественных маллоков, подразумеваемых int **, и ограничений синтаксиса 2D-массива, закрепленных в языке.
Итак, если вам нужен массив 4x5, вы можете сделать:
#define WIDTH 4
#define HEIGHT 5
#define INDEXOF(x,y) ((y*WIDTH) + x)
int *myArray = malloc(sizeof(int) * 5 * ELEMS_PER_ROW);
Затем вы можете инициализировать массив линейно или с вложенным циклом for:
for(int x=0; x<width; x++)
for(int y=0; y<height; y++)
myArray[INDEXOF(x,y)] = ... some value ...;
И вы должны передать его методу, например:
[foo testCall: myArray];
Хотя вы можете также перенести ширину и высоту или, еще лучше, создать подкласс IntMatrix для NSObject, который охватывает все арифметика указателей и хранение за пределами красивого чистого API.
(весь код введен в SO)
C arrays can't be variable in more than one dimension.
You can't have this:
int testarr[][] = {
{1,1,1},
{1,0,1,2},
{1,1}
};
But you can have this:
int testarr[][3] = {
{1,1,1},
{1,0,1},
{1,1,1},
{4,5,6},
{7,8,9}
}
foo(testarr);
void foo(int param[][3])
{
printf("%d", param[3][1]); // prints 5
}
You can't use int[][]
because the size of the second dimension affects how the array is laid out in memory. If you know the second dimension you can use int[][x]
, otherwise you'll have to use int**
which can be accessed just like an array.
Why don't you just use NSArray
or NSMutableArray
with NSInteger
s? Those array classes are of variable length, and much easier to use.
This would result in
- (void)testCall: (NSArray *) arr {
NSLog(@"cell value is %u", [[arr objectAtIndex:1] objectAtIndex:1]);
}
(Of course, you would also have to define testarr using NSArray.)
If you really want to use C arrays, making the method argument a pointer to an int with
- (void)testCall: (int*) arr {
will probably work (with the rest of the code staying the same).