|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Передача массивов в функцииПри использовании в качестве параметра функции массива в функцию передается указатель на его первый элемент, а не копия всего массива. т.е. массив всегда передается по адресу. (Следует помнить, что в языке С имена массивов без индекса – это указатели на нулевой элемент массива.) Параметр должен иметь тип, совместимый с указателем, т.е. элементами массива. Т.к. работаем с указателями, то информация о количестве элементов массива теряется, и следует передавать его размерность через отдельный параметр. Имеется три способа объявления параметра, предназначенного для получения указателя на массив.
Пример 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] << " ";}
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |