Глобальные переменные и параметры функций С++
Гобальные переменные
Глобальные переменные видны в функциях, где нет локальных переменные с теми же именами, поэтому использовать их для передачи данных между функциями просто. Не рекомендуется это делать, так как это затрудняет отладку программы и препятствует помещению функций в библиотеки общего пользования. Нужно стремиться к тому, чтобы функции были максимально независимы, а их интерфейс полностью определялся прототипом функции.
Возвращаемое значение
Возврат из функции в вызвавшую ее функцию выполняется оператором
Если функция описана как void, выражение не указывается.
Оператор return можно опускать для функции типа void, если возврат из нее происходит перед закрывающей фигурной скобкой, и для функции main.
Если оператор return в функции main не указан, при компиляции выдается предупреждение.
Выражение, указанное после return, неявно преобразуется к типу возвращаемого функцией значения и передается в точку вызова функции.
Примеры:
Важно. Нельзя возвращать из функции указатель на локальную переменную, так как память, выделенная локальным переменным при входе в функцию, освобождается после возврата из нее.
Пример:
Параметры функции
Параметры в заголовке описания функции, называются формальными параметрами, или просто параметрами, а в операторе вызова функции — фактическими параметрами, или аргументами.
При вызове функции сразу вычисляются выражения, стоящие на месте аргументов; затем в стеке выделяется память под формальные параметры функции в соответствии с их типом, и каждому из них присваивается значение соответствующего аргумента.
При этом проверяется соответствие типов и при необходимости выполняются их преобразования. При несоответствии типов выдается диагностическое сообщение.
Есть два способа передачи параметров в функцию: по значению и по адресу.
При передаче по значению в стек заносятся копии значений аргументов, и операторы функции работают с этими копиями. Доступа к исходным значениям параметров у функции нет, а, следовательно, нет и возможности их изменить.
При передаче по адресу в стек заносятся копии адресов аргументов, а функция осуществляет доступ к ячейкам памяти по этим адресам и может изменить исходные значения аргументов:
Результат работы программы:
Первый параметр (i) передается по значению. Его изменение в функции не влияет на исходное значение. Второй параметр (j) передается по адресу с помощью указателя, при этом для передачи в функцию адреса фактического параметра используется операция взятия адреса, а для получения его значения в функции требуется операция разыменования. Третий параметр (к) передается по адресу с помощью ссылки. При передаче по ссылке в функцию передается адрес указанного при вызове параметра, а внутри функции все обращения к параметру неявно разыменовываются. Поэтому использование ссылок вместо указателей улучшает читаемость программы, избавляя от необходимости применять операции получения адреса и разыменования. Использование ссылок вместо передачи по значению более эффективно, поскольку не требует копирования параметров, что имеет значение при передаче структур данных большого объема.
При изучение языка программирования С++ предполагается, что студент в должной степени владеет английским языком. Иначе понимание многих специальных терминов будет затруднительным. Идеальный вариант, если изучение программирования учащийся совмещает с подготовкой к IELTS. Занимаясь с репетиторами всегда можно проконсультироваться и по вопросам правильного произношения компьютерных терминов.
Глобальные переменные видны в функциях, где нет локальных переменные с теми же именами, поэтому использовать их для передачи данных между функциями просто. Не рекомендуется это делать, так как это затрудняет отладку программы и препятствует помещению функций в библиотеки общего пользования. Нужно стремиться к тому, чтобы функции были максимально независимы, а их интерфейс полностью определялся прототипом функции.
Возвращаемое значение
Возврат из функции в вызвавшую ее функцию выполняется оператором
return [выражение];Функция может содержать несколько операторов return.
Если функция описана как void, выражение не указывается.
Оператор return можно опускать для функции типа void, если возврат из нее происходит перед закрывающей фигурной скобкой, и для функции main.
Если оператор return в функции main не указан, при компиляции выдается предупреждение.
Выражение, указанное после return, неявно преобразуется к типу возвращаемого функцией значения и передается в точку вызова функции.
Примеры:
int fl(){return k;} //правильно void f2(){return k;} // не верно, f2 не должна возвращать значение double f3(){return k;} // правильно, k преобразуется к типу double
Пример:
int* f ( ) { int а = 5; return &а; / / нельзя }
Параметры в заголовке описания функции, называются формальными параметрами, или просто параметрами, а в операторе вызова функции — фактическими параметрами, или аргументами.
При вызове функции сразу вычисляются выражения, стоящие на месте аргументов; затем в стеке выделяется память под формальные параметры функции в соответствии с их типом, и каждому из них присваивается значение соответствующего аргумента.
При этом проверяется соответствие типов и при необходимости выполняются их преобразования. При несоответствии типов выдается диагностическое сообщение.
Есть два способа передачи параметров в функцию: по значению и по адресу.
При передаче по значению в стек заносятся копии значений аргументов, и операторы функции работают с этими копиями. Доступа к исходным значениям параметров у функции нет, а, следовательно, нет и возможности их изменить.
При передаче по адресу в стек заносятся копии адресов аргументов, а функция осуществляет доступ к ячейкам памяти по этим адресам и может изменить исходные значения аргументов:
#includevoid f(int i, int* j, int& k); int main(){ int i = 1, j = 2, к = 3: cout << "i j k\n"; cout << i << ‘ ‘ << j << ‘ ‘ << k << ‘\n’; f(i, &j, k); cout << i << ‘ ‘ << j << ‘ ‘ << k; return 0 } void f (int i, int* j, int& k){ i++; (*j)++; k++; }
i j k 1 2 3 1 3 4
При изучение языка программирования С++ предполагается, что студент в должной степени владеет английским языком. Иначе понимание многих специальных терминов будет затруднительным. Идеальный вариант, если изучение программирования учащийся совмещает с подготовкой к IELTS. Занимаясь с репетиторами всегда можно проконсультироваться и по вопросам правильного произношения компьютерных терминов.