const len);
uint16_t calc_crc16_ccitt(uint8_t inData[], uint16_t const len);
Я чет такой синтаксис в С впервые вижу. Разве можно передать массив по значению, не указывая его размер явно?
если правильно понимаю, то именно тут ничем не отличаются функционально. а вот если в структуре то будет отличаться
Во втором случае будет создан массив на стэке (в автоматической памяти). Соответственно, при выходе из функции память будет освобождена.
Какого размера?
На момент выделения кадра стэка для функции размер массива будет известен.
в обоих случаях в функцию передается указатель на нулевой элемент массива, сам указатель передается по-значению. во втором случае указатель передается константный, в первом: обычный, т.е. его значение можно будет изменять в функции: вот и вся разница.
и где он будет храниться?)
Вот это уже яснее, спс. А как давно этот синтаксис?
мне кажется, я знал это всегда... т.е. еще от K&R
На самом деле это тоже неверно. Вот что написано в K&R: Имеется одно различие между именем массива и указателем, которое необходимо иметь в виду. указатель является переменной, так что операции PA=A и PA++ имеют смысл. Но имя массива является константой, а не переменной: конструкции типа A=PA или A++,или P=&A будут незаконными. Когда имя массива передается функции, то на самом деле ей передается местоположение начала этого массива. Внутри вызванной функции такой аргумент является точно такой же переменной, как и любая другая, так что имя массива в качестве аргумента действительно является указателем, т.е. Переменной, содержащей адрес. https://godbolt.org/z/G6rhYo34c @setpoint_f
Обсуждают сегодня