void ShowData(int(&arr)[], int size);
Эта запись означает передачу ссылки на начало массива, или на весь массив, как параметр?
Или нужно обязательно указывать [size]
массива?
Или, как вообще можно корректно передать массив в функцию так, чтобы в нём отразились все изменения?
Достаточно просто использовать указатель:
void ShowData(int *arr, int size);
То же самое можно записать в виде void ShowData(int arr[], int size);
и void ShowData(int arr[N], int size);
, но результат будет абсолютно такой же: arr будет указателем на int
.
Если длина массива известна во время компиляции, тогда можно передавать именно ссылку на массив:
void ShowData(int(&arr)[N]);
Где N
- константа времени компиляции. Как вариант, можно сделать N
параметром шаблона:
template <std::size_t N> void ShowData(int(&arr)[N]) {/*здесь N - размер массива*/}
Обратите внимание: Если вы выделяли память динамически, и у вас есть не сам массив, а указатель на него, тогда чтобы передать его в int(&arr)[N]
потребуется reinterpret_cast
.
Причудливая конструкция, которую вы написали:
void ShowData(int(&arr)[], int size);
Дает тот же эффект*, что передача указателя, только интерфейс менее удобный: чтобы передать массив в такую функцию, придется использовать reinterpret_cast<int(&)[]>(массив)
.
Эта запись означает передачу ссылки на начало массива, или на весь массив, как параметр?
Я так понимаю, ни то, ни другое.
Это ссылка на тип int[]
, но т.к. он считается incomplete type, переменные в принципе не могут иметь такой тип (в отличие от int[N]
). Можно сказать, что вы передаете ссылку на несуществующий int[]
с тем же адресом, что и ваш массив.
* Хотя возможно, что доступ к такому параметру приводит к нарушению strict aliasing (типы ведь отличаются) и неопределенному поведению, но нужно проверять стандарт.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть приложение написанное на Qt511 с использованием QML в качестве GUI, вопрос в том как можно реализовать использование этого интерфейса в браузере,...
Как связать механизм SIGNAL-SLOT с динамическим QcheckBox-oм ??