Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
12 Параметры-массивы и параметры-структуры
Массив не передается по значению, а передается указатель на его первый элемент. При этом компилятор автоматически преобразует переменную массива в ссылочный тип данных вне зависимости от описания параметра. При этом не обязательно указывать размеры массива, так как внутри программы не отслеживаются автоматически.
Но размер массива недоступен вызываемой функции. Это можно обойти несколькими способами. Строки оканчиваются нулем, поэтому их размер можно вычислить. Для других массивов можно передавать их размер с помощью дополнительных параметров, которые задают размер, или определяют тип, содержащий указатель и индикатор длины, и передавать его вместо просто массива. Например:
voidcompute1(int* vec_ptr, intvec_size); // одинспособ
structTvector // другой способ с помощью структуры
{ int* ptr; // указатель на целочисленный массив
int size; // размермассива
};
void compute2(vec v);
Для многомерных массивов можно вместо них использовать векторы указателей, которые не требуют специального рассмотрения. Например:
char* day[] = { "mon", "tue", "wed", "thu", "fri", "sat", "sun" };
При использовании в качестве параметров функций переменных-структур возможно следующее:
1) использование для передачи данных по значению;
2) использовать для передачи данных по ссылке.
При передаче данных по ссылке внутри тела функции используется указатель на структуру. Доступ к данным полей структуры выполняется с помощью оператора «стрелка» (->). Который автоматически выполняет операцию разыменовывания. Формат:
имя_указателя_на_структуру->имя_поля
Пример использования параметра-структуры для функции чтения полей с клавиатуры и передачи их в программу.
intentry(structsman* man) // Определение функции ввода данных структуры
{ cout<< "\nИмяклиента : ";
cin>> man->name;
cout<< "\nОтчество клиента : ";
cin>>man->name2;
cout<< "\nФамилияклиента : ";
cin>> man->family;
cout<< "\nГодрожденияклиента : ";
cin>>man->year;
cout<< "\nНомерсчетаклиента : ";
cin>>man->number;
return 0; // Код успешного окончания процесса
} // ---------------------------------------
При передаче параметров-структур по значению рекомендуется указывать описание параметра struct в формате
structимя_типа_структурыпеременная_структур