Длина массива в объективе C - PullRequest
31 голосов
/ 07 октября 2009

Я не нашел ответа ни на один из заданных вопросов. Я передаю Integer Array в функцию. Теперь я хочу пройти через массив. Но, как все работает в C, C ++, просто используя arrayname.length, который дает количество элементов в массиве. Как найти это? [NSArrayObject length] работает для типа NSArray, но я хочу его для int []. даже [XYZ count] не работает .... так что хочу еще один способ выяснить это.

Ответы [ 10 ]

30 голосов
/ 27 февраля 2013

Вы можете использовать [XYZ count], чтобы получить длину массива

21 голосов
/ 07 октября 2009

Нет ничего специфического для Objective-C с массивом целых чисел. Вы бы использовали ту же технику, как если бы вы использовали C.

sz = (sizeof foo) / (sizeof foo[0]);
17 голосов
/ 07 октября 2009

В C. нет такой вещи, как array.length. Массив int в Objective-C точно такой же , что и массив int в C. Если он статически определен как int foo[5], то вы может сделать sizeof(foo), чтобы получить размер - но только в той же функции foo определена в (для других функций, это просто указатель на int, а не массив как таковой). В противном случае, нет никакого способа получить эту информацию. Вам нужно либо передать размер или использовать значения часового типа (например, завершающий символ '\ 0' в строках C, которые являются просто массивами char).

5 голосов
/ 07 октября 2009

Массив - это в основном просто адрес памяти в начале блока памяти, выделенного для массива. Чтобы реально использовать его, вам нужно как-то запомнить длину после того, как она была создана. Вы можете передать длину каждой функции или обернуть массив и длину в другую структуру, передав эту структуру вокруг.

5 голосов
/ 07 октября 2009

А? В C нет такой вещи, как "arrayname.length". Массив примитивного типа, такой как int[], не имеет никакой информации о длине, связанной с ним во время выполнения.

4 голосов
/ 06 февраля 2012

[массив подсчетов], кажется, это работает проще всего в target-c

3 голосов
/ 09 января 2011

этот код можно использовать, когда общее количество элементов в массиве неизвестно.

main()
{
    int a[]={1,2,3,4,5,6,7}
    int i;
    clrscr();
    for (i=0;i<=((sizeof(a)/sizeof(int));i++)
    {
        puts(a[i]);
    }
    getch();
}
2 голосов
/ 07 октября 2009

В C. нет такой вещи, как arrayname.length. Вот почему так много функций принимают пары аргументов, один аргумент с массивом и один аргумент с длиной массива. Наиболее очевидный случай для этого - основная функция. Вы можете найти эту функцию для всех ваших проектов iPhone в файле с именем main.m, она будет выглядеть примерно так:

int main(int argc, char *argv[]) {    
  NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
  int retVal = UIApplicationMain(argc, argv, nil, nil);
  [pool release];
  return retVal;
}

Обратите внимание, что argv - это эктор v или массив строк, а аргумент argc - это число c , сколько элементов в этом массив.

Вы должны будете сделать то же самое для всех примитивных типов, это часть C Objective-C. Если вы остаетесь в деталях Objective , используя NSArray или подклассы, это нормально, но требует, чтобы все элементы были объектами.

1 голос
/ 07 октября 2009

Если вам нужен массив целых чисел, оберните их в объекты NSNumber и поместите в NSArray.

То, что вы просите сделать, не очень хорошо поддерживается в C, хотя на Mac есть метод, который можно попробовать (malloc_size):

определить размер динамически выделяемой памяти в c

1 голос
/ 07 октября 2009

выглядит как работа для NSMutableArray. Есть ли причина, по которой вам нужно работать с массивом C? если нет, рассмотрим NSMutableArray.

Я могу ошибаться (поэтому, пожалуйста, исправьте меня, если я есть), но в C нет простого способа получить размер int [] во время выполнения. вам нужно будет сделать что-то вроде создания структуры для хранения вашего массива и int, где вы сами сможете отслеживать, сколько элементов в вашем массиве.

еще интереснее, вы можете сделать так, чтобы ваша структура содержала ваш массив и блок. тогда вы можете разработать блок для отслеживания.

но это скорее вопрос С, а не вопрос цели-с.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...