- •6.1. Общая форма определения функции
- •6.2. Создание функции
- •6.3. Использование аргументов
- •6.4. Прототипы функций
- •6.5. Использование предложения return
- •6.6. Использование функций в выражениях
- •6.7. Основы техники указателей
- •6.7.1. Объявление указателей
- •6.7.2. Операторы указателей
- •6.8. Передача в функции указателей
- •6.9. Передача в функции массивов
- •6.9.1. Указатели и массивы
- •6.9.2. Способы передачи в функции массивов
- •6.10. Передача в функцию строк
- •6.10.1.Строковые константы
- •6.10.2. Передача строк
- •6.11. Возврат указателей
6.6. Использование функций в выражениях
В предыдущем примере значение, возвращенное функций bох(), было присвоено переменной, а затем значение этой переменной выводилось на экран посредством предложения cout. Хотя такое построение программы нельзя назвать неправильным, однако более эффективно было бы использовать возвращаемое значение непосредственно в предложении cout. Так, функцию main( ) из предыдущей программы можно более эффективно переписать следующим образом:
int main() {
// используем возвращаемое из bох() значение непосредственно
cout << "Объем равен " << box (10.1, 11.2, 3 . 3 ) ;
return 0;
}
Когда выполняется предложение cout, автоматически вызывается функция bох(), что дает возможность получить ее возвращаемое значение. Это значение и выводится на экран. Нет никакого смысла сначала присваивать это значение какой-то переменной.
He-void функции допустимо использовать в любых выражениях. При вычислении выражения функция вызывается автоматически, и ее возвращаемое значение используется в выражении. Например, приведенная ниже программа суммирует объемы трех коробок и выводит экран среднее значение объема:
// Использование Ьох() в выражении.
#include <iostream>
using namespace std;
// используем данные типа double
double box(double length, double width, double height);
int main()
{
double sum;
sum = box(10.1, 11.2, 3.3) +box(5.5, 6.6, 7.7) + box(4.0, 5.0, 8.0) ;
cout << "Сумма объемов равна " << sum << "\n";
cout << "Среднее значение объема равно " << sum /3.0;
return 0;
}
// Этот вариант box использует данные типа double,
double box(double length, double width, double height)
{
return length * width * height ;
}
Вывод этой программы:
Сумма объемов равна 812.806
Среднее значение объема равно 270.935
6.7. Основы техники указателей
6.7.1. Объявление указателей
Указатель — это переменная, содержащая адрес памяти другой переменной.
Общая форма объявления переменной-указателя такова:
тип * имя-переменной;
Здесь тип — это базовый тип указателя. Базовый тип определяет, на данные какого типа будет указывать этот указатель. имя-переменной - это имя переменной-указателя. Так, чтобы объявить ip, как указатель на int, вы должны написать:
int *ip;
Поскольку базовым типом ip указан int, этот указатель можно использовать только для указания на переменные типа int.
Теперь объявим указатель на float:
float *fp;
В этом случае базовым типом fp является float, и указатель fp может указывать только на переменные типа float.
6.7.2. Операторы указателей
Для использования с указателями предусмотрены два специальных оператора: * и &. Оператор & возвращает адрес памяти, в которой расположен его операнд. Например, предложение
ptr = &total;
помещает в ptr адрес памяти, где находится переменная total. Этот адрес является адресом ячейки памяти, в которой хранится переменная total. Этот адрес не имеет ничего общего со значением total. Про операцию & можно сказать, что она возвращает адрес переменной, перед которой она указана. Таким образом, приведенное выше предложение присваивания можно передать словами, как "ptr получает адрес total". Чтобы лучше разобраться в этом присваивании, предположим, что переменная total расположена по адресу 100. Тогда после выполнения присваивания ptr будет иметь значение 100.
Второй оператор, *, в некотором роде обратный по отношению к &. Этот оператор возвращает значение переменной, расположенной по адресу, который указан в качестве операнда этого оператора. Продолжая тот же пример, если ptr содержит адрес переменной total, то предложение
val = *ptr;
поместит значение переменной total в val. Если, например, total первоначально имела значение 3200, то val будет теперь иметь то же значение 3200, потому что это значение, которое хранится в памяти по адресу 100, т. е. по адресу, который присвоен переменной ptr. Операцию * можно назвать "по адресу". Таким образом, последнее предложение можно передать словами, как "val получает значение, расположенное по адресу ptr".
Приведенная ниже программа выполняет последовательность только что описанных операций:
#include <iostream>
using namespace std;
int main()
{
int total;
int *ptr;
int val;
total = 3200; // присвоим total значение 3200
ptr = &total; // получим адрес total
val = *ptr; // получим значение по этому адресу
cout << "total равно: " << val << '\n';
return 0 ;
}
