Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб 6_Основы функции.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
258 Кб
Скачать
☆

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 ;

}