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) {}
}