Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


Передача масивів в якості параметрів функцій




 

При використанні в якості параметру масиву у функцію передається вказівка на його перший елемент, іншими словами, масив завжди передається за адресою. При цьому інформація про кількість елементів масиву втрачається, і слід передавати його розмірність через окремий параметр.

Приведемо приклад обчислення добутку елементів масиву з використанням функції.

 

 

#include <iostream>

using namespace std;

 

double proizv(int* mas,int n);

//double proizv(int mas[],int n);

 

void main()

{

int mas[4] = {1,2,3,4};

cout<<proizv(mas,4); //24

}

 

double proizv(int* mas,int n)

//double proizv(int mas[],int n)

{

double p = 1;

for(int i=0;i<n;i++)

p*=mas[i];

 

return p;

}

 

Запис int* mas при передачі масиву у функцію еквівалентний запису int mas[] та означає вказівку на перший елемент масиву.

При передачі багатовимірних масивів всі розмірності, якщо вони не відомі на етапі компіляції, повинні передаватися в якості параметрів.

Наступний приклад показує роботу з двовимірним масивом як з вказівкою int (*mas)[3].

 

#include <iostream>

using namespace std;

 

void vivod(int (*mas)[3], int m, int n)

//void vivod(int mas[][3], int m, int n)

{

int i,j;

for(i=0;i<m;i++)

{

for(j=0;j<n;j++)

cout<<mas[i][j]<<" ";

cout<<"\n";

}

}

 

void main()

{

 

int mas[3][3]=

{

{11,12,13},

{21,22,23},

{31,32,33}

};

 

int(*m)[3]= mas;

 

vivod(++m, 2, 3);

 

}

 

По суті, двовимірний масив є вказівкою int(*m)[3]. Це означає, що при арифметичних операціях з вказівкою, вона збільшується або зменшується на кількість байтів трьох елементів типу даних int до першого розмикання. Після першого розмикання адреса збільшується на кількість байтів одного елементу int, як у разі звичайної вказівки. У даному прикладі вказівці int(*m)[3] привласнюється значення вказівки двовимірного масиву mas. Потім, у функцію vivod передається вказівка m збільшена на одиницю. Функція vivod набуває значення вказівки та виводить другий і третій рядки масиву:

 

21 22 23

31 32 33

 

При передачі у функцію записи int (*mas)[3] та int mas[][3] еквівалентні. Другий параметр у дужках вказувати обов’язково, саме він говорить на скільки елементів масиву треба зміщуватись при виконанні арифметичних операцій.

Можна передати двовимірний масив у функцію як подвійну вказівку ("**").

Приклад.

 

#include <iostream>

using namespace std;

 

void vivod(int **mas, int m, int n)

{

int i,j;

for(i=0;i<m;i++)

{

for(j=0;j<n;j++)

cout<<mas[i][j]<<" ";

cout<<"\n";

}

}

void main()

{

M, n - відповідно кількість рядків

І стовпців масиву

 

int i, j, m, n;

cin>>m>>n;

 

Ініціалізація динамічного масиву

int **mas = new int*[m];

for (i=0;i<m;i++)

mas[i]= new int[n];

 

Введення даних

for(i=0;i<m;i++)

for(j=0;j<n;j++)

cin>>mas[i][j];

 

Виведення даних

vivod(mas, m, n);

 


Поделиться:

Дата добавления: 2014-12-30; просмотров: 370; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.005 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты