В C то, что у вас есть указатель на массив, не означает, что вы знаете его длину (сколько у него записей).Каким-то образом вы должны знать, чтобы избежать ошибок индексации массива.
Существует всего несколько способов сделать это:
- Согласуйте длину массива.Код просто знает, что определенные массивы имеют определенную длину, например 17. Это обычно считается плохой практикой, но люди делают это для массивов, которые являются специфическими для проблемной области, например, матрицы перевода для трехмерной графики, которые обычно имеют 4 строки.
- Документируйте длину массива с помощью объявления константы или определения макроса и используйте этот символ для управления циклами, обращающимися к массиву.
- Неявно связывает хорошо известную переменную, содержащую размер массива времени выполнения, с массивом,Программа обращается к переменной, когда ей нужно знать размер массива.
- Передать указатель на массив, а вызываемую вызываемую длину узнать .Теперь вызываемый объект знает длину и может, в свою очередь, передать ее тому, кто ее вызывает.
- Упакуйте массив и его длину в структуру и передайте указатель на структуру.Теперь вызываемый объект может обратиться к структуре для определения размера массива.
Это обсуждение немного сбивает с толку для языка Си, поскольку в общем разговоре мы склонны рассматривать длину и размер массива как синонимы.Но в C «размер» имеет особое значение;это количество единиц хранения, занимаемых объектом.Он легко вычисляется по длине массива, и иногда программы передают «размер», а не длину.ИМХО, вы должны передать массив length функциям, которые манипулируют массивами, индексируя их, поскольку длина более абстрактна и ее легче понять.