2015-08-04 3 views
1

Как найти размер целочисленного массива без каких-либо встроенных (стандартных) функций? Вот моя попытка:Расчет размера массива без использования встроенных функций

int fun(int a[25],int ele) 
{ 

    int flag=0,i=0; 
    while(a[i]!=NULL) 
    { 
     flag++; 
     i++; 
    } 
    return flag; 
} 
+6

примечание: 'a [i]! = NULL' ... нет. 'a [i]' не является указателем, но NULL. –

+10

Simple: 'return 25;' – this

+0

Если вы нашли ответ полезным, вы можете [захотеть принять одно из них] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an -answer-work) –

ответ

4

Вы не можете.

Поведение при переходе по границам массива не определено.

Вы можете моделировать массив с каким-то значением, действующим как терминатор, но это вряд ли практично. Передайте размер в качестве дополнительного параметра, если вы действительно хотите иметь только один аргумент, используйте struct.

+1

@ P45Imminent Наличие терминатора массива * является практическим. На самом деле, это один из лучших способов в C, чтобы сделать это. – Jashaszun

+1

@Jashaszun Если бы вы могли как-то хранить информацию о размере, вы знаете, как дополнительная переменная или параметр. – this

+0

@ Это прочитал мой ответ. Это именно то, что я говорю. Вот почему я сказал в комментарии выше, что это ** один из лучших способов. * Другой * лучший способ - передать размер в качестве отдельного аргумента. – Jashaszun

8

Наиболее распространенный способ отправки данных в массивах - это нуль-завершение массивов. (Тем не менее, это не может работать для вас, если, например, 0 является действительным числом, чтобы в вашем массиве. В этом случае, вы можете захотеть использовать -1, например.)

int array_len(int *arr) 
{ 
    const int TERMINATOR = 0; // or -1, as the case may be 
    int i = 0; 
    while (arr[i] != TERMINATOR) 
     i++; 
    return i; 
} 

Однако, лучший метод, вероятно, просто отправляет только массив, но массив и длину при прохождении данных. Таким образом, вам не нужно постоянно вызывать подобные функции, чтобы получить длины массивов в ваших различных функциях.

+0

В этом случае все пустые ячейки этого массива должны иметь 0. – RAP

3

C не сохраняет размер массива с ним. В строках C для определения размера массива используется NULL-терминатор, но это соглашение. Либо передайте размер в качестве аргумента функции, либо выберите значение, которое считается концом массива и ищет его.

+0

'C не хранит размер массива с ним.' .. это? –

+1

@SouravGhosh Что? – Jashaszun

+0

@Jashaszun указатель! = Массив –

1

В вас while условие цикла -

while(a[i]!=NULL)//replace NULL with such value which is unique and not used in your array. 

Использование -1 или что-то.

Вы можете подумать использовать '\0' вместо NULL, но тогда, если ваш массив имеет 0 между ними, тогда также цикл остановится. (если 0 в массиве не используют '\0').

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