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

Передача массивов в функции

Читайте также:
  1. II. Основные задачи и функции Отдела по делам молодежи
  2. III. ФУНКЦИИ ДЕЙСТВУЮЩИХ ЛИЦ
  3. III. Функции семьи
  4. IV. Порядок и формы контроля за исполнением государственной функции
  5. Wait функции
  6. А) приобретение и передача технологий, включая основные проектные работы
  7. Абсолютные и относительные ссылки. Стандартные формулы и функции. Логические функции
  8. Акцентная структура слова в русском языке. Система акцентных противопоставлений. Функции словесного ударения.
  9. Акцентная структура слова в русском языке. Функции словесного ударения.
  10. Алгоритм нахождения глобального экстремума функции
  11. Аппарат государства – это система государственных органов, обладающих государственной властью и осуществляющих функции государства.
  12. Аргументы функции main(): argv и argc

При использовании в качестве параметра функции массива в функцию передается указатель на его первый элемент, а не копия всего массива. т.е. массив всегда передается по адресу. (Следует помнить, что в языке С имена массивов без индекса – это указатели на нулевой элемент массива.) Параметр должен иметь тип, совместимый с указателем, т.е. элементами массива.

Т.к. работаем с указателями, то информация о количестве элементов массива теряется, и следует передавать его размерность через отдельный параметр.

Имеется три способа объявления параметра, предназначенного для получения указателя на массив.

 

Пример 1.

#include <stdio.h>

#include <conio.h>

void out(int num[10]);

Void main(void)

{

int t[10], i;

for(i=0; i<10; i++) t[i]=i;

out (t);

getche();

}

void out (int arr[10])

{

int i;

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

printf("%d ", arr[i]);

}

 

Пример 2.

#include <iostream.h>

#include <stdio.h>

#include <conio.h>

void out(int num[],int n);

Void main(void)

{

int n;

cout << "Enter size of array: ";

cin >> n;

int *t =new int[n];

for(int i=0; i<=n; i++) t[i]=i+1;

out (t, n);

delete[]t;

getche();

}

void out (int arr[], int n)

// или void out (int *arr, int n)

{

int i;

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

printf("%d\n", arr[i]);

}

 

Все, приведенные выше, три способа объявления параметра приводят к одинаковому результату – указателю.

При использовании массива в качестве аргумента функции происходит передача в функцию его адреса. Это позволяет непосредственно из вызываемой функции изменять значения объектов, определённых в вызывающей функции.

Пример 3. Даны два одномерных массива. Вывести упорядоченные массивы, и упорядоченный массив, объединенный из элементов двух массивов.

 

#include<iostream.h>

#include<conio.h>

void in(int a[], int n);

void sort(int a[], int n);

void unite(int a[],int b[], int ab[], int n1, int n2);

void out(int a[],int n);

Void main()

{int n1, n2;

cout << "Enter sizes of arrays: ";

cin >> n1 >> n2;

int *arr1=new int[n1];

int *arr2=new int[n2];

int *arr_un=new int[n1+n2];

in(arr1,n1);

in(arr2,n2);

unite(arr1, arr2, arr_un, n1, n2);

sort(arr1, n1);

sort(arr2, n2);

sort(arr_un, n1+n2);

out(arr1,n1);

out(arr2,n2);

out(arr_un,n1+n2);

delete []arr1;

delete []arr2;

delete []arr_un;

getche();}

void in(int a[], int n)

{ cout << "\nEnter " << n << " integers: ";

for (int i=0; i<n; i++) cin >> a[i]; }

void unite(int a[],int b[], int ab[], int n1, int n2)

{ for (int i=0; i<n1; i++) ab[i]=a[i];

for (int i=0; i<n2; i++) ab[i+n1]=b[i]; }

void sort(int a[], int n)

{ int tmp;

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

for (int j=(i+1); j<n; j++)

{if (a[i]>a[j])

{tmp=a[i];

a[i]=a[j];

a[j]=tmp;}}}

void out(int a[],int n)

{ cout << "\n";

for (int i=0; i<n; i++) cout << a[i] << " ";}

 


1 | 2 | 3 | 4 | 5 | 6 | 7 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.)