Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015

Здесь есть возможность читать онлайн «Стивен Прата - Язык программирования C. Лекции и упражнения (6-е изд.) 2015» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Год выпуска: 0101, Издательство: Вильямс, Жанр: Старинная литература, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Язык программирования C. Лекции и упражнения (6-е изд.) 2015: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Язык программирования C. Лекции и упражнения (6-е изд.) 2015»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

Язык программирования C. Лекции и упражнения (6-е изд.) 2015 — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Язык программирования C. Лекции и упражнения (6-е изд.) 2015», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

him->income равно barney.income, если him == &barney

him->income равно fellow[0].income, если him == &fellow[0]

Другими словами, указатель на структуру, за которым следует операция ->, работает таким же образом, как имя структуры с последующей операцией точки (.). (Вы не можете использовать просто him. income, потому что him не является именем структуры.)

Важно отметить, что him — указатель, но him->income — это член структуры, на которую он указывает. Это значит, что в данном случае him->income представляет собой переменную типа float.

Второй метод для указания значения члена структуры соответствует следующей последовательности утверждений: если him == &fellow [0], то *him == fellow [0], поскольку операции & и * являются обратными. Следовательно, после подстановки мы получаем такое выражение:

fellow[0].income == (*him).income

580 глава 14

Круглые скобки здесь обязательны, т.к. операция . имеет более высокий приоритет, чем *. Подводя итоги, если him — это указатель на структуру типа guy по имени barney, то следующие выражения эквивалентны:

barney.income == (*him).income == him->income //предполагая, что him == &barney А теперь давайте посмотрим на взаимодействие между структурами и функциями.

Сообщение функциям о структурах

Вспомните, что аргументы функции передают ей значения. Каждое значение является числом — возможно, int, float, ASCII-кодом символа или адресом.

Структура сложнее одиночного значения, поэтому не должно вызывать удивление то, что ранние реализации С не позволяют применять структуру в качестве аргумента для функции. В более новых реализациях это ограничение было снято, и ANSI С позволяет использовать структуры в аргументах функций. Таким образом, современные реализации С предлагают возможность выбора между передачей в качестве аргумен- тов самих структур и указателей на эти структуры, либо, если вас интересует только часть структуры — передачей в аргументах членов структуры. Мы исследуем все три метода, начав с передачи членов структуры как аргументов.

Передача членов структуры

До тех пор, пока член структуры имеет тип данных с единственным значением (т.е. int или один из его производных типов, char, float, double либо указатель), его можно передавать в качестве аргумента функции, которая принимает этот конкретный тип. Простейшая программа финансового анализа из листинга 14.5, которая складывает сумму на обычном банковском счете клиента и сумму на его сберегательном счете, иллюстрирует это утверждение.

Листинг 14.5. Программа funds1.c

Структуры и другие формы данных 581 Вот результаты пробного запуска Общая - фото 435

Структуры и другие формы данных 581

Вот результаты пробного запуска:

Общая сумма на счетах у Стэна составляет $12576.21.

Итак, программа работает. Обратите внимание, что функция sum() не знает, да и не заботится о том, являются ли фактические аргументы членами структуры; она только требует, чтобы они имели тип double.

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

modify(sstan.bankfund);

Это могла бы быть функция, изменяющая сумму на банковском счету Стэна. Следующий подход к сообщению функции о структуре предусматривает уведомление о том, что функция имеет дело со струк турой.

Использование адреса структуры

Мы будем решать ту же задачу, что и ранее, но на этот раз в качестве аргумента применим адрес структуры. Поскольку функция будет работать со структурой funds, она также должна использовать объявление funds. Код программы приведен в листинге 14.6.

Листинг 14.6. Программа funds2.c

Запуск программы дает тот же самый результат Общая сумма на счетах у Стэна - фото 436

Запуск программы дает тот же самый результат:

Общая сумма на счетах у Стэна составляет $12576.21.

Функция sum() принимает указатель (money) на структуру funds в своем единственном аргументе. Передача адреса &stan функции приводит к тому, что теперь указатель money указывает на структуру stan. Затем с помощью операции -> мы получаем

582 Глава 14 значения stan .bankfund и stan. savefund. Поскольку функция не изменяет значение, на которое ссылается указатель, money объявляется как указатель на const.

Эта функция также имеет доступ к членам, представляющим названия учреждений, хотя и не пользуется ими. Обратите внимание, что для получения адреса структуры должна применяться операция &. В отличие от имени массива имя структуры не является синонимом ее адреса.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Язык программирования C. Лекции и упражнения (6-е изд.) 2015»

Представляем Вашему вниманию похожие книги на «Язык программирования C. Лекции и упражнения (6-е изд.) 2015» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Язык программирования C. Лекции и упражнения (6-е изд.) 2015»

Обсуждение, отзывы о книге «Язык программирования C. Лекции и упражнения (6-е изд.) 2015» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x