Передача аргументом массива в С++

В качестве аргументов функций могут указываться массивы. Учитывая, что имя массива является ссылкой на первый его эле­мент, существует некоторая свобода в способе передачи массива аргументом функции. Хотя, если смотреть в корень проблемы, то все способы базируются на одном механизме. Тем не менее, рассмотрим все варианты. Первый и наиболее прямолинейный показан в следующем листинге. В программе объявляется функция show{), аргументом которой указан целочисленным массив из пяти элементов. Прототип функции имеет вид void show(int n[5]). Передаваемый массив указывается вместе с раз­мером. В результате выполнения программы в столбик выводятся значения элементов массива/
#include 
using namespace std;
//При объявлении массива явно указан размер:
void show(int n[5]){
for(int i=0; i < 5; i++)
 cout<<"n[" << i << "]=" << n[i] << endl;
}
int main(){
int n[5]={1,2,3,4,5};
show(n);
return 0;
}
В следующем коде выполнятеся передача аргументом массива и при этом размер не указан. Фактически ничего не изменится.
#include 
using namespace std;
//При объявлении массива размер не указан:
void show(int n[]){
for(int i=0;i<5;i++)
 cout << "n[" << i << "]=" << n[i] << endl;
}
int main(){
int n[5]={1,2,3,4,5};
show(n);
return 0;
}
Причина в том, что при передаче массива аргументом и в том, и в другом случае на самом деле передается ссылка на первый элемент массива. Поэтому особого значения не имеет, указан размер массива или нет - в С++ все равно проверки на предмет выхода за пределы массива нет. Поэ­тому разумнее, передавать массив в виде указателя, благо таковым является имя массива. Пример соответствующего кода приведен в следующем листинге.
#include 
using namespace std;
//Аргументом указано имя массива и размер:
void show(int *n,int m){
for(int i=0; i < m; i++)
 cout << "n[" << i << "]=" << n[i] << endl;
}
int main(){
int n[5]={1,2,3,4,5};
show(n,5);
show(n,3);
return 0;
}

Оставить комментарий

Вы должны быть авторизованы , чтобы оставить или оценить комментарий.

Онлайн всего: 5
Гостей: 5
Пользователей: 0

STUDLAB Сообщить про опечатку на сайте