Использовать указатель или массив в параметрах функции

1) float scalar_product(float *x, float *y) совпадает с 2) float scalar_product(float x[], float y[])?

У меня есть float a[3], b[3];, которые содержат несколько векторов, и функция должна дать мне скалярное произведение.

С моим фоном Java я написал функцию 2) (на бумаге), но в примере решения использовалась 1) с указателем.

Итак, мои вопросы: они одинаковы? Если нет, то в чем разница и когда что использовать?


person koin    schedule 03.07.2016    source источник
comment
Когда использовать то, что в значительной степени зависит от удобочитаемости. Если вы хотите различать, какие данные передаются, то обязательно используйте сигнатуру второго метода. Но по всем намерениям и целям они одинаковы.   -  person cs95    schedule 03.07.2016
comment
Это должен быть дубликат.   -  person alk    schedule 03.07.2016
comment
Мы здесь: stackoverflow.com/q/16258075/694576   -  person alk    schedule 03.07.2016
comment
это становится более сложным, когда в массиве есть два или более измерений.   -  person Weather Vane    schedule 03.07.2016
comment
А здесь: stackoverflow.com/q/16144535/694576 и здесь: stackoverflow.com/q/15261509/694576   -  person alk    schedule 03.07.2016


Ответы (1)


Да, обе версии фактически одинаковы, потому что, когда массивы передаются в качестве аргументов функции, они фактически распадаются на указатель на первый элемент.

Таким образом, создание параметра функции как указателя или массива не будет иметь никаких изменений в поведении.

Связано, C11, глава §6.7.6.3, Описатели функций

Объявление параметра как «массив типа» должно быть изменено на «полный указатель на тип» [...]

Таким образом, float scalar_product(float x[], float y[]) оказывается таким же, как float scalar_product(float *x, float *y).

person Sourav Ghosh    schedule 03.07.2016