Передача массива по ссылке

Как передается статически выделенный массив по ссылке?

void foo(int (&myArray)[100])
{
}

int main()
{
    int a[100];
    foo(a);
}

Имеет ли (&myArray)[100] какой-либо смысл или его просто синтаксис для передачи любого массива по ссылке? Я не понимаю отдельную скобку, за которой следуют большие скобки. Спасибо.

4b9b3361

Это синтаксис ссылок на массив - вам нужно использовать (&array), чтобы уточнить компилятору, что вы хотите ссылаться на массив, а не на (недопустимый) массив ссылок int & array[100];.

РЕДАКТИРОВАТЬ: Некоторые разъяснения.

void foo(int * x);
void foo(int x[100]);
void foo(int x[]);

Эти три являются разными способами объявления одной и той же функции. Все они рассматриваются как принимающие параметр int *, вы можете передать им любой массив размеров.

void foo(int (&x)[100]);

Это принимает только массивы из 100 целых чисел. Вы можете безопасно использовать sizeof на x

void foo(int & x[100]); // error

Это анализируется как "массив ссылок", что не является законным.

158
ответ дан 20 апр. '11 в 3:07
источник

Это просто необходимый синтаксис:

void Func(int (&myArray)[100])

^ Передайте массив из 100 int по ссылке, имя параметра myArray;

void Func(int* myArray)

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

void Func(int (*myFunc)(double))

^ Передайте указатель на функцию. Функция возвращает int и принимает double. Имя параметра myFunc.

34
ответ дан 20 апр. '11 в 3:08
источник

Это синтаксис. В аргументах функции нужны int (&myArray)[100] круглые скобки, которые заключают в себе &myArray. если вы их не используете, вы передадите array of references, и это связано с тем, что subscript operator [] имеет более высокий приоритет над & operator.

например. int &myArray[100] // array of references

Итак, используя type construction (), вы сообщаете компилятору, что хотите ссылку на массив из 100 целых чисел.

Например, int (&myArray)[100] // reference of an array of 100 ints

18
ответ дан 20 апр. '11 в 4:06
источник

Массивы по умолчанию передаются указателями. Вы можете попробовать изменить массив внутри вызова функции для лучшего понимания.

1
ответ дан 02 июля '15 в 2:07
источник