Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык программирования Сpp 25.09.11 (2).doc
Скачиваний:
16
Добавлен:
19.08.2019
Размер:
10.09 Mб
Скачать

Int yearBorn; //год рождения

float middleGrade; // средний балл

};

Здесь аргуменены указатели на элементы структуры. Но вся структура записывается в свободный участок памяти с непрерывными адресами. Поэтому можно определить указатель хранящий адрес начала структуры. Синтаксис в данном случае даже проще чем при объявлении указателей на функции:

имя_структурного_типа *имя_указателя_на_структуру;

Например, после объявления структурного типа date можно объявить структуру

date student1;

date *point1=& student1;

После этого к элементам структуры можно обращаться с помощью указателя с дополнительным оператом ‘->’ , хотя можно оставить старое обращение через имя структуры и оператор точка. Вот программа с ипользованием описанной выше структуры:

#include <iostream>

#include <windows.h>

using namespace std;

struct date { // объявление структурного типа // фамилия

char *name1;

char *name2; // èìÿ

char *name3; // отчество

Int yearBorn; //год рождения

float middleGrade; // средний балл

};

//------------------------------------------------

void main(){ SetConsoleOutputCP(1251);

date student1;

date *point1=&student1;//объявление указателя на структуру

point1->name1="Иванов";/*операция доступа к элементу структуры*/

cout<<student1.name1<<endl;

}

4.1. Демонстрационные программы

Для того чтобы научиться программировать, нужно читать программы, написанные опытными программистами. Как правило, эти программы лаконичны и часто содержат оригинальные решения. Основные идеи таких программ легко запоминаются, а фрагменты программ можно использовать в своей работе. В рассмотренной ниже программе используется структура ffblk, которая определена в библиотеке dos. Структура предназначена для записи информации о файле – его размере, атрибутах (только, чтение, системный, скрытый и т.п.), времени создания и имени. Вот описание этой структуры.

struct ffblk {

long ff_reserved;

long ff_fsize; /* file size */

unsigned long ff_attrib; /* attribute found */

unsigned short ff_ftime; /* file time */

unsigned short ff_fdate; /* file date */

char ff_name[256]; /* found file name */

}

В программе также будут использованы две функции- findfirst и findnext из библиотеки dir. Кстати, эти функции обычно используются в паре.

Прототипы функций имеют следующий вид:

int findfirst(const char *pathname, struct ffblk *ffblk, int attrib);

int findnext(struct ffblk *ffblk );

Функция findfirst предназначена для поиска файла с указанным шаблоном из указанной директории. Например, C:\TEST\myfail.* . Если поиск оказался успешным, то возвращаемое значение равно 0. Когда файлов с указанным именем нет, то возвращается -1. Результаты поиска записываются в рассмотренную ранее структуру .

Функция findnext использует заполненную структуру и ищет следующий еще не найденный обеими функциями файл удовлетворяющий указанным требованиям. Если такой файл найден, то возвращается 0. Если такой файл отсутствует или список исчерпан, возвращается -1.

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

Теперь рассмотрим немного измененный пример программы из раздела Help «Borland C++6». Программа выводит список файлов каталога по заданному шаблону.

#include <dir>

#include <dos>

#include <iostream>

using namespace std;

int main(void)

{

struct ffblk ff;//структура, определенная в библиотеке dos