Студопедия  
Главная страница | Контакты | Случайная страница

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

Передача массивов в качестве параметров

Читайте также:
  1. Cинаптическая передача
  2. R закон перехода количественных изменений в качественные
  3. Активные операции коммерческих банков, структура активов банка, их качественная характеристика.
  4. Альным взаимодействием. Вот почему эту качественно новую ступень природного феномена следует выделить как социальный импринтинг.
  5. Анализ и оценка деловой активности осуществляется на качественном и количественном уровнях.
  6. Анализ связи парной корреляции. Вычисление параметров уровня регрессии.
  7. АНАЛИЗ ЧУВСТВИТЕЛЬНОСТИ ПРОЕКТА К ВОЗМОЖНЫМ ИЗМЕНЕНИЯМ ПАРАМЕТРОВ
  8. В зависимости от интенсивности изменений качественного состояния объекта процессы делят на эволюционные и революционные;
  9. В качестве бреда
  10. В качестве жгута можно использовать скрученный платок, толстую веревку и т. д., применив закрутку

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

:

#include <iostream.h>

int sum(const int* mas, const int n);

int const n = 10;

void main(){

int marks[n]={3, 4, 5, 4, 4};

cout << "Сумма элементов массива: " << sum(marks, n);

}

int sum(const int* mas, const int n) /*варианты: int sum(int mas[], int n) или int sum(int mas[n], int n)

(n должна быть константой) */

{int s = 0;

for (int i = 0; i<n; i++) s += mas[i];

return s;}

При передаче многомерных массивов все размерности, если они не известны на этапе компиляции, должны передаваться в качестве параметров.

Внутри функции массив интерпретируется как одномерный, а его индекс пересчитывается в программе. В приведенном ниже примере с помощью функции подсчитывается сумма элементов двух двумерных массивов. Размерность массива b известна на этапе компиляции, под массив a память выделяется динамически:

#include <stdio.h>int sum(const int *a, const int nstr, const int nstb);void main(){

int b[2][2] = {{2, 2}, {4, 3}};

printf("b %d\n", sum(&b[0][0], 2, 2)); /* имя массива передавать нельзя из-за несоответствия типов */

int i, j, nstr, nstb, *a; printf("Введите количество строк и столбцов: \n");

scanf("%d%d", &nstr, &nstb);

a = (int *)malloc(nstr*nstb*sizeof(int));

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

for (j = 0; j<nstb; j++)scanf("%d", &a[i*nstb+j]);

printf("a %d\n", sum(a, nstr, nstb));

}

int sum(const int *a, const int nstr, const int nstb)

{int i, j, s = 0;

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

for (j = 0; j<nstb; j++)s += a[i*nstb + j];

return s;}

Для того чтобы работать с двумерным массивом естественным образом, можно применить альтернативный способ выделения памяти:

#include <iostream.h>int sum(const int **a, const int nstr, const int nstb);

void main(){int nstr, nstb;

cin >> nstr >> nstb;

int **a;

a = new int* [nstr];

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

a[i] = new int [nstb];

/*... формирование матрицы a */

cout << sum(a, nstr, nstb);

}

int sum(const int **a, const int nstr, const int nstb)

{int i, j, s = 0;

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

for (j = 0; j<nstb; j++)s += a[i][j];

return s;}

В этом случае память выделяется в два этапа: сначала под столбец указателей на строки матрицы, а затем в цикле под каждую строку. Освобождение памяти выполняется в обратном порядке.

 

28. События (Events) в Delphi. Обработчики событий.

29. Параметры со значениями по умолчанию.




Дата добавления: 2015-02-16; просмотров: 15 | Поможем написать вашу работу | Нарушение авторских прав




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