Задать вопрос
@dronreviews

В чем разница int mas[], int mas[0], int mas[100]?

int mas[100] массив из 100 элементов, а вот mas[], int mas[0] в гугле не нашел.
Также для char mas[] и char mas[0].
  • Вопрос задан
  • 2565 просмотров
Подписаться Оценить Комментировать
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
int mas[] используется в трёх местах.

1. Когда размер определяется инициализатором: int mas[] = { 1, 2, 3, 4, 5 };
2. Чтобы задать параметр вида «массив неопределённой длины»: double vecLen(double a[], int size) {}
Си не может жёстко задавать размер массива в параметре, чтобы больший или меньший не подходил; даже если напишешь напишешь double vecLen(double a[3]) {}, всё равно другой массив подойдёт. Си++ задаёт так: double vecLen(double (&a)[3]) {})
3. Подсказал jcmvbkbc, реально мало на что нужно: extern int a[].

int mas[0] создаёт массив нулевой длины, надобности в котором, понятное дело, никакой. Зато этот код используется, чтобы накладывать структуру данных, которая заканчивается массивом неизвестной длины, на какой-то буфер в памяти — как указатель: тут массив (C++ не проверяет выход за границу).

struct Packet {
  unsigned short length;
  unsigned char data[0];
}

void processPacket(void* data, unsigned length)
{
   // Простите уж, что перешёл на C++
   const Packet& packet = *reinterpret_cast<Packet*>(data);
   if (length != sizeof(Packet) + packet.length)
     throw std::logic_error("Packet size mismatch");
   for (unsigned i = 0; i < packet.length; ++i) {}
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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