Длина массива в Objective C

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

Hope, которая помогает.

32
задан Martin 7 October 2009 в 07:35
поделиться

7 ответов

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

sz = (sizeof foo) / (sizeof foo[0]);
22
ответ дан 27 November 2019 в 19:59
поделиться

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

18
ответ дан 27 November 2019 в 19:59
поделиться

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

6
ответ дан 27 November 2019 в 19:59
поделиться

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

5
ответ дан 27 November 2019 в 19:59
поделиться

В C. не существует такой вещи, как имя-массива.длина . Вот почему так много функций принимают пары аргументов: один аргумент с массивом и один аргумент длиной массив. Наиболее очевидным случаем для этого является функция main. Вы можете найти эту функцию во всех ваших проектах 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 ector или массив строк, а аргумент argc представляет собой c количество элементов, которые находятся в этом массиве.

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

2
ответ дан 27 November 2019 в 19:59
поделиться

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

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

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

1
ответ дан 27 November 2019 в 19:59
поделиться

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

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

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

но это скорее вопрос C, а не вопрос target-c.

1
ответ дан 27 November 2019 в 19:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: