Step 8 (S-3124)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/539/step/8

У начинающих изучать C++ иногда возникает соблазн передать массив в функцию следующим образом:


void foo(int a[3]) { /* ... */ }


Однако, не смотря на то, что такой код будет компилироваться, работает он не совсем так, как ожидается. Например:


int a[1] = {};foo(a);



Хотя программист написавший функцию foo, вероятно, ожидает, что в нее можно будет передавать только массивы из трёх элементов, этот код успешно скомпилируется. Компилятор не увидит никаких проблем, так как размерность массива в определении функции проигнорируется. 

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


Важно: при передаче в функцию массивы не копируются (т.е. на самом деле передаётся указатель на массив).