Добрый вечер! Не знаю как можно проверить пустой ли массив, или в нём есть данные. Для примера есть такой код:
int max(int* tab, unsigned int len)
{
int i;
int tmp;
i = 0;
tmp = tab[i];
while (i != len)
{
if (tmp <= tab[i])
tmp = tab[i];
i++;
}
return (tmp);
}
int main(void)
{
int arr[10];
printf("%i", max(arr, 10));
return (0);
}
т.е. если массив пустой, он должен вернуть 0. Но как это сделать я не знаю, помогите плез!
Илья, Вы сначала определитесь сами, что именно для вас будет "пустым" массивом.
Стандартные статические и динамические массивы, как написал выше poige не могут быть пустыми. Они всегда имеют размер >0. И да же если вы не инициализируете элементы массива, в них все равно будут какие-то значения (мусор).
Стандартный подход - если длина массива 0, значит массив пустой.
Вы можете, например, в программе считать, что значение 0 - это отсутствие элемента и в коде проверять это. Тогда проверка на "пустоту" массива своидтся просто к проверке всех значений на равенство 0. Если хоть один элемент не 0 - массив не пустой. Значение 0 я взял произвольно, вы можете брать любое другое, в зависимости от типа данных хранящегося в массиве. Или еще хуже - сделать массив структур, одно поле структуры отводите под признак - пустая структура или нет.
В языке С в принципе не бывает "пустых" массивов. Разве что динамически выделенная под массив память может иметь размер 0 или flexible array member в структуре может соответствовать массиву размера 0.
Поэтому не ясно, о чем вы вообще ведете речь.
В любом случае, передавать в такую функцию правильный размер массива - ваша задача.
Илья, в Си невозможно отличить не инициализированную переменную от инициализированной (по крайней мере, типа int), — какой нибудь мусор в ней будет находится, — это не скриптовый язык, в котором как в JavaScript, есть особое значение особого типа undefined. Поэтому, если вам надо, явно инициализируйте массивы нулями.