Как отправить массив в стиле C в метод target-c - PullRequest
1 голос
/ 22 августа 2011

Я пытаюсь отправить массив целых чисел в стиле c в метод target-c, но в методе получаю только первый элемент массива.Это пример:

int a[3];
a[0] = 111;   a[1] = 222;   a[2] = 333;
[self getMatrix:a];

затем

-(void)getMatrix:(int[3])matrix
{
    return;      -- breakpoint here
}

Итак, когда отладка останавливается на точке останова, у меня есть матрица:

matrix  int *   0xbfffddd4
*matrix int 111

Где находятся другие элементы?Итак, 2d-массивы превращаются в 1d-массив, 3d-массивы становятся 2d-массивами и т. Д. Что я делаю не так?

Спасибо!

PS NSArray работает нормально, но я могу 'не представляю, как работать с многомерными (3d, 4d) NSArrays без написания тонны кода.

Ответы [ 2 ]

2 голосов
/ 22 августа 2011
-(void)getMatrix:(int[3])matrix
{
    int a = matrix[0];
    int b = matrix[1];
    int c = matrix[2];
}

Вы увидите, что значения верны. Нет ничего плохого. Отладчик показывает только *matrix, который является первым элементом. Здесь matrix сам по себе является указателем на целое число или int *.

1 голос
/ 22 августа 2011

Вам нужно отправить указатель на первый элемент и размер массива через.

Посмотрите, как

- (void)setLineDash:(const CGFloat *)pattern count:(NSInteger)count phase:(CGFloat)phase

в NSBezierPath делает это.

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSBezierPath_Class/Reference/Reference.html

...