Добавил:
ПОИТ 2016-2020 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кобайло 1 сем / Обобщенная схема компьютера.docx
Скачиваний:
38
Добавлен:
29.04.2018
Размер:
467.55 Кб
Скачать
  1. Массивы и строки как параметры функций.

Как правило, массив в параметре функции интерпретируется как указатель.

В программе функция f1 вычисляет длину строки, заданной фактическим параметром buf, формальный параметр - указатель:

#include <stdio.h>

#include <string.h>

int f1 (char *s) {

printf ("\nsizeof(s)=%d",sizeof(s));

for (int l=0;*s;s++,l++);

return l;

}

void main () {

char buf[128];

strcpy (buf,"Hello,win");

printf ("\nresult=%d",f1(buf));

}

  1. Перегрузка функций. Задание параметров функции по умолчанию.

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

//прототипы

int max (int arr[ ], int size);

long max (long arr[ ], int size);

double max (double arr[ ], int size);

double max (long arr[ ], int size); //ошибка

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

long max (long arr[ ], int size);

double max (long arr[ ], int size);

Назначение перегрузки – разрешить выполнять одно и то же действие с разными операндами.

Пусть объявлена функция: char* func(long, int = 0);

Инициализатор второго параметра является параметром по умолчанию.

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

cout << func(31) << func(32, 3);

интерпретируется как

cout << func(31, 0) << func(32, 3);

Задавать параметр по умолчанию можно только для последних параметров.

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

  1. Функции с переменным числом аргументов.

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

int sum (int n, ...)

{ int *p = &n;

int s = 0;

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

s += *(++p);

return s;

}

void main()

{ cout << sum(6, 4, 5, 1, 2, 3, 0); }

  1. Указатели как формальные параметры и как результат функции.

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

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

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

void swap(int *, int *); // прототип

int main()

{ int a = 10; int b = 20;

cout << a<<' '<< b<<endl;

swap(&a, &b);

cout << a<<' '<< b<<endl;

}

void swap(int *x, int *y)

{ int c;

c = *x; *x = *y; *y = c;

}

Указатель-результат функции может ссылаться не только на отдельную переменную, но и на массив.

Пример. В массиве А увеличить все числа на 1 (внутри функции).

int *ftf(int *pA, int n)

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

*(pA + i) = *(pA + i) + 1;

return pA;

}

void main()

{ int A[] = {8, 4, 3, 2, 11};

*ftf(A, 5);

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

cout<<A[i]<<' ';

}