double arrow

Структуры Си


Рекурсивные функции.

Возможный конфликт при использовании параметров по умолчанию.

Ключевое слово const.

void func (const int *pn); // позволяет объявлять функции с ключевым словом const

Такое объявление параметра обеспечивает неизменяемость объекта, на который указывает pn, то есть это позволяет компилятору блокировать нежелательные побочные эффекты вызова функции.

void func1 (const char *pc)
{
//*pc=’A’;
}


Замечание:

1) при объявлении константных параметров ключевое слово const должно фигурировать как в объявлении функции, так и в ее определении;

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

void func( const int n);

“Перегрузка” имён функции.

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

Этот механизм возможен ввиду того, что функции с одним и тем же именем, но с разным количеством и разными типами параметров компилятор декорирует по-разному.

Ограничение в использовании перегрузки:

1) не могут перегружаться функции, имеющие совпадающий тип и число аргументов, но разные типы возвращающих значений;




2) не могут перегружаться функции, имеющие неявно совпадающие типы аргументов.

int MaxInt(int x; int y)
{
return (x>y);
}
double MaxDouble (double x, double y)
{
return (x>y);
}


//примеры без перегрузки

main()
{
int i=MaxInt (12,8);
double d= MaxDouble(1.1;2.2);
}


C перегрузкой:

main()
{
int i=Max(12,8);
double d= Max(1.1, 2.2);
double dd=Max(1.1, 2); //ERROR!!
}
void f(int x, int y=5);


void f(int x, int y = 0);

void f (int);

int main () {

f (2, 5) ; // ошибка

f (5); // ошибка, компилятор не знает, какую функцию вызывать.

}

Вызывают сами себя.

Происходит выполнение одного и того же кода с разными наборами данных.

Каждое выполнение тела функции имеет свою область стека для параметров и локальных переменных.

Достоинства:

Ø компактность.

Недостатки:

Ø большие затраты времени на вызов функции;

Ø большие затраты памяти (стека) для организации каждого вложенного цикла.

Специфика рекурсивных функций:

1) программист должен обеспечивать выход из рекурсии;

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


Факториал без рекурсии:


int n=5;
int res=1;
for(int i=n; i>1; i--)
res *=i;
int F(int n)
{
if (n<=1)
return 1;
else
{
int x=F(n-1);
return n*x;
}
}

В большом количестве случаев удобно обращаться к совокупности переменных Структура языка Си – средство для укрупнения данных.

Объявление структуры – описание компилятором шаблона, по которому он будет создавать объект данного типа.

struct имя
{
список полей структуры
}
struct student
{
char name[30]
unsigned int cource,
bool sex;
int age;

}








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