Использование указателей и ссылок с ключевым словом const

Некоторые конструкции языка C++ являются источником путаницы. Одной из таких конструкций является использование ключевого слова const с указателями и ссылками. Следующие примеры помогут вам прояснить ситуацию.

// Объявление данных

int number;

const int count=0;

// Указатель является константой

int* const nl=unumber;

// Указатель указывает на константу

// (указываемое значение есть const)

const int* n2=&count;

// И указатель, и указываемое значение

// являются константами

const int* const n3=&count;

// Указатели на строки

// строка является константной

const char* strl="text";

// Указатель на строку является константой

char* const str2="text";

// Указатель и сама строка – константы

const char* const str3="text";

/* Массивы указателей на символы */

// Символы являются константами

const char* textl[]={"lnel","lne2","lne3"};

// Указатели являются константами

char* const text2[]={"lnel","lne2","lne3"};

// Указатели и символы являются константами

const char* const text3={"stl","st2","st3");

 

79. Использование функций. Создание и использование простой функции. Прототипы функций. Вызов по значению и вызов по ссылке. Использование указателей для связи между функциями

 

Объявление функций: прототипы функций

1 returnDataType functionName( dataType argName1, dataType argName2, ..., dataType argNameN);

где,

returnDataType — возвращаемый тип данных

functionName — имя функции

dataType — тип данных

argName1...N — имена параметров функции (количество параметров неограниченно)

Смотрим пример объявления функции:

 
1 2 3 / / Объявление прототипа функции с двумя целыми параметрами / / функция принимает два аргумента и возвращает их сумму int sum(int num1, int num2);

 

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

1 int sum(int , int ); // тот же прототип функции

Иногда, объявление функции называют определением функции, хотя это не одно и то же.

 

1 2 3 4 returnDataType functionName( dataType argName1, dataType argName2, ..., dataType argNameN) { // тело функции }

 

Определение функций

 

 
1 2 3 4 5 // определение функции, которая суммирует два целых числа и возвращает их сумму int sum(int num1, int num2) { return (num1 + num2); }

 

Рассмотрим определение функции на примере функции sum.

 

 

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

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

 
1 2 3 4 5 6 7 8 // объявление функции суммирования int sum(int, int);   // определение функции суммирования int sum(int num1, int num2) { return (num1 + num2); }

 

 

 

Согласно стандарту ANSI С все функции должны иметь прототипы. Прототипы могут располагаться либо в самой программе на С или C++, либо в заголовочном файле. Большинство прототипов функций находятся в самих программах. Объявление функции в С и C++ начинается с ее прототипа. Прототип функции достаточно прост; обычно он включается в начало программы для того, чтобы сообщить компилятору тип и количество аргументов, используемых некоторой функцией. Использование прототипов обеспечивает более строгую проверку типов по сравнению с той, которая была при прежних стандартах С.

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

возвращаемый_тип имя_функции(тип_аргумевта(-ов)) (имя_аргумента(-ов));

 

Функция может иметь тип void, int, float и так далее и определяется возвращаемым типом. Имя_функции() — это любое значимое наименование, выбранное вами для определения этой функции.

Вызов функций

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

1 funcName( arg1, arg2, ... );

где,

funcName — имя функции;

arg1..2 — аргументы функции (значения или переменные)

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

Смотрим пример:

1 2 // вызов функции синуса sin( 60 );

Вызов функции выполняется записью её имени, а затем круглых скобочек (). Если функция принимает аргументы, то в круглых скобках передаются аргументы, в порядке, указанном в объявлении функции. Подробно про функции, читайте статью: Функции в С++.