Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1-5.docx
Скачиваний:
4
Добавлен:
07.01.2022
Размер:
128.38 Кб
Скачать

25. Указатель на указатель. Массивы указателей. Динамические двумерные массивы. Примеры.

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

Например, следующее объявление сообщается компилятору, что newbalance - это указатель на указатель типа float: float **newbalance; Важно понимать, что newbalance - это не указатель на число с плавающей точкой, а указатель на указатель на вещественное число.

Для получения доступа к целевому значению, косвенно указываемому указателем на указатель, следует применить оператор * два раза, как показано в следующем примере:

#include <stdio.h> int main(void) { int x, *p, **q; x = 10; p = &x; q = &p; cout<< **q<<endl;

return 0; }

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

Пример:

void display_array(int *q[]) { int t; for(t=0; t<10; t++) cout<< *q[t]<<endl; }

Двумерный динамический массив в языке С++ может быть создан как массив указателей на массивы строк, при этом память как под массив указателей, так и под массивы строк должна быть выделена динамически.

Пример:

{int **A = (int **)malloc(N*sizeof(int *));

for(int i = 0; i < N; i++) {

A[i] = (int *)malloc(M*sizeof(int));

}

26. Функции. Прототип функции. Определение функции. Примеры.

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

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

В общем виде прототип функции выглядит так:

тип имя_функции(тип [имя_пар1], ..., тип [имя_парN]);

Определение функции – это ее полное описание, включающее тип возвращаемого значения, количество и типы самих параметров, и ее тело – тот код, который стоит внутри фигурных скобок после имени функции.

Пример:.

int maxi (int x, int y)  { int max;  if (x>y) max = x;  else max = y;  return max;  }

27.Передача аргументов функции по значению, по ссылке. Примеры.

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

int max (int x, int y)  {main(); 

int a,b,c,d,m,m1,m2;

cin>>a>>b>>c>>d;

m1=max(a,b);

m2=max(c,d); M=max (m1,m2); 

cout<< ''max=''<<m;}

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

void swap (int & x, int & y){

int t = x;

x = y;

y = t; }

Соседние файлы в предмете Программирование