Я получаю идею, что для MODIFY массива в другой функции мне нужно объявить параметр в качестве ссылки в определении функции:
bool sortInput(ifstream &infile, StudentType (&students)[MAXSIZE], int size)
И я провозгласил прототип аналогичным образом, поскольку он не будет компилироваться должным образом иначе:
bool sortInput(ifstream &, StudentType (&students)[MAXSIZE], int);
Однако это, по-видимому, не передает массив в качестве ссылки. Я делаю вызов другой функции, и он не видит никаких изменений (все, что он делает, это распечатать массив, но ничего не печатает). Я знаю, что массив был изменен, потому что печать его в исходной функции показывает все изменения, они просто не переносятся на глобальную переменную массива и остаются в рамках функции, которая ее модифицирует, несмотря на то, что она передан как ссылка.
Я читал бесчисленные другие потоки и поисковые запросы Google, поэтому я уверен, что определение функции правильное, однако нигде оно не указывает правильную форму для прототипа.
Вам не нужно передавать массив по ссылке, поскольку он передается как указатель. Размер прохода. В вашей функции сортировки изменяется переменная размера, но в вашей основной функции она всегда равна нулю.
Массив уже передан как указатель, поэтому вы уже можете изменить его содержимое. Добавление &
не требуется.
func(int ar[]
) будет принимать все, включая динамический указатель и т. д. Но func(int (&ar)[SIZE])
требует, чтобы вызывающая сторона вызывала только с действительным массивом int[SIZE]
. Например, передача int ar[5]
приведет к ошибке времени компиляции.
int var; foo(&var);
и функция будетvoid foo(int *var) { int another_var = *var; }
Попробуйте найти некоторые статьи о пуатье и ссылки на C ++. Это проясняет ситуацию.