2009-10-07 3 views
27

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

ответ

20

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

sz = (sizeof foo)/(sizeof foo[0]); 
+0

Я пробовал это ... я видел это для 2-мерного массива, но мой массив одномерен ... как просто int foo [], так что я делаю sizeof (foo)/sizeof (foo [0]), он возвращает 4/4 ie 1 ..i уже пробовал ... но не повезло .. есть ли другой способ? Спасибо – Darpan

+2

@Darpan: Это работает только тогда, когда вы объявляете int foo [5], а не int foo []. – mouviciel

+0

согласен с mouviciel, это не получится, что вы хотите. – pxl

5

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

17

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

+0

Я ищу Длина т.е. числа элементов в целочисленном массиве. и не sizeof.as wen id o sizeof просто возвращает меня sizeof int – Darpan

+4

Как я уже сказал, нет. 'sizeof()' работает для массивов статического размера, как пример, который я дал выше, в той же функции, в которой они определены. Это самый близкий C, который поддерживает это. – Chuck

5

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

1

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

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

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

, но это скорее вопрос C, а не объектив-c quesiton.

1

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

Что вы просите сделать, это на самом деле не поддерживается хорошо в C, хотя есть метод на макинтош вы могли бы попробовать (malloc_size):

determine size of dynamically allocated memory in c

2

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

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

3

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

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

4 пробела перед строкой текста говорит сайту использовать форматирование кода. Чтобы быстро поставить 4 пробела перед многими строками кода, выберите все строки и нажмите кнопку ** {} **. Я исправил его для вас, чтобы сделать его доступным для чтения. –

2

[число массива], это, кажется, работает самый простой в Objective-C

28

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

+1

Вопрос о массиве C, где нет счетчика. – Vive

Смежные вопросы