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

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

    void Func(int (&myArray)[100]) { }  int main() {     int a[100];     Func(a); } 

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

  • Ответы

  • Это синтаксис для массива ссылок - вам нужно использовать (&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 

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

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

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

    Передать массив из 100 инт по ссылке название параметров myArray;

    void Func(int* myArray) 

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

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

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

    Это синтаксис. В аргументах функции 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

    Вам даже не нужно &myArray потому что они передаются по ссылке (по сути) по умолчанию в С.

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