Декларация функций

Краткие теоретические сведения

Функции пользователя

Пример динамического размещения двумерного массива в С

...

void main(void)

{ int i,j,n,m;

float **a;

puts(“\n Input n,m:”);

scanf(“%d %d”,&n,%m);

printf(“\n Свободная память -%d”,coreleft());

a=(float **)calloc(n,sizeof(float*)); // Захват памяти

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

a[i]=(float *)calloc(m,sizeof(float));

...

for(i=0; i<n; i++) free(a[i]); // Освобождение памяти

free(a);

getch();

}

Пример создания одномерного динамического массива в С++

...

double *x;

int i, n;

...

cout<< "Введите размер массива: ";

cin>>n;

x = new double [n];

if (x == NULL)

{

cout<<" Предел размерности! ";

return;

}

for (i=0; i<n; i++) //выполняем некоторые действия с массивом

cin>>x[i];

...

delete [ ]x; // Освобождение памяти

...

Пример создания двухмерного динамического массива в С++

...

int **m, n1, n2, i, j;

cout << " Введите размеры массива (количество строк и столбцов): ";

cin>>n1>>n2;

m = new int * [n1]; // Захват памяти для указателей

for (i=0; i<n1; i++) // Захват памяти для элементов матрицы

m[i] = new int [n2];

...

for (i=0; i<n1; i++) // выполняем некоторые действия с матрицей

for (j=0; j<n2; j++)

m[i][j] = i+j; // *(*(m+i)+j) = i+j;

...

for (i=0;i<n1; i++) // Освобождение памяти

delete [ ] m[i];

delete [ ] m;

...

Пример динамического размещения массива строк в С++

#include <iostream.h>

#include <string.h>

void main()

{

char **str;

int n1,i;

cout<<"Введите количество строк: ";

cin>>n1;

str=new char *[n1+1];

for (i=0;i<n1+1;i++)

str[i]=new char[255];

if (str[i]==NULL)

{

cout<<"Predel razmera massiva";

return;

}

cout<<"Введите строки: "<<endl;

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

cin>>*(str+i);

cout<<"Вывод массива строк: "<<endl;

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

cout<<*(str+i)<<endl;

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

delete [ ] str[i];

delete [ ] str;

}

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

Описание функции – декларация ее прототипа вначале программного файла. Испо­ль­зует­ся следующий способ декларации функций:

<тип_результата> <имя_функции>(<тип> <переменная>, …<тип> <переменная>);

Идентификаторы переменных в круглых скобках прототипа указывать не обязательно, так как компилятор языка их не обрабатывает.

Пример описания функции fun со списком параметров:

float fun(int, float, int, int);

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

Полное определение функции имеет следующий вид:

<тип_результата_функции> <имя_функции>(список параметров)

{

код функции

}

Тип результата определяет тип значения, который возвращается функцией в точку ее вызова при помощи оператора возврата return. Если тип функции не указан, то по умолчанию предполагается тип int. Список параметров состоит из перечня типов и имен параметров, разделенных запятыми. Функция может не иметь параметров (void), но круглые скобки необходимы в любом случае.

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

Пример реализации функции, определяющей наименьшее из двух целых чисел:

int mini(int x, int y)

{

int temp;

if (x<y) temp=x;

else temp=y;

return t;

}

Можно написать функцию mini и таким образом:

mini(int x, int y)

{

return (x<y)? x:y;

}

Если тип возвращаемого результата опущен, то он по умолчанию будет иметь тип int.

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

Если функция не возвращает никакого значения, она должна быть описана как функция типа void (пустая).

Например, для вывода строки на экран дисплея можно использовать следующую функцию:

void messag()

{

cout<<"Привет, я учусь программировать на С++"<<endl;

}

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

void messag(void).

В языке С каждая функция – это отдельный блок программы, вход в который возможен только через вызов данной функции. Например, нельзя оператором перехода goto передать управление внутрь функции.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: