Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec_prog2_ru_2016_3.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
334 Кб
Скачать

1.3 Функции и массивы

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

Int func1(int arr[]) {...}

или int func2(int *mass) {...}

В обоих случаях в функции создается копия указателя соответст­вующего типа, который действует внутри функции как обычный ука­затель-переменная и может изменять свое значение. Например, arr++. Доступ к элементам массива внутри функции может осуществляться как с помощью индексов (arr[1], arr[i]), так и применяя опера­цию разыменования указателя ( *(arr+1), *(arr+i)).

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

Есть два способа определения конца массива: 1) в качестве одного из параметров в функцию передается размер массива; 2) последний элемент массива задается каким-либо уникальным значением, которое анализируют в функции.

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

#include <stdio.h>

int sum(int N,int x[]) // Определение функции

{int S=0;

for(int i=0;i<N;i++) S+=x[i];

return S;}

Void main()

{int a[5]={1,3,5,10,2},c[3]={2,1,6},res1,res2;

res1=sum(5,a); // Вызов функции

printf("сумма элементов массива a=%d\n",res1); // 21

res2=sum(3,c); // Вызов функции

printf("сумма элементов массива c=%d\n",res2);} // 9

Пример. Функция вычисляет количество символов в слове, в качестве признака конца массива используется '\0'.

#include <stdio.h>

int len(char *); // Прототип функции

Void main()

{char *name="TERMINATOR";

printf("Длина 1-ой строки=%d",len(name)); // 10

char *str="Высшая математика";

printf("Длина 2-ой строки=%d",len(str)); } // 17

int len(char *c) // Определение функции

{int i=0;

while(c[i++]);

return i-1; } //длина строки без учета символа '\0'

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

#include <stdio.h>

void exch(int, int []); //Прототип функции

Void main()

{int a[5]={1,3,5,8,2};

printf("Массив до изменения: ");

for(int i=0;i<5;i++) printf(" %d",a[i]);

exch(5,a); // Вызов функции

printf("\nМассив после изменения: ");

for(int i=0;i<5;i++) printf(" %d",a[i]);

}

void exch(int N,int x[]) // Определение функции

{for(int i=0;i<N;i++) x[i]*=x[i];}

В результате на экран выведется:

Массив до изменения: 1 3 5 8 2.

Массив после изменения: 1 9 25 64 4.

1.4 Функции с умалчиваемыми значениями параметров

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

тип имя_параметра=умалчиваемое_значение

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

Пример. Функция находит произведение 2-х переменных

#include <stdio.h>

int def(int a=10, int b=3){return a*b;}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]