|
Хочу получить удостоверение. Сколько стоит оплата? |
Опубликован: 10.12.2015 | Доступ: свободный | Студентов: 617 / 96 | Длительность: 07:10:00
Тема: Программирование
Специальности: Программист, Системный архитектор
Лекция 17:
Использование указателей на структуры
< Лекция 16 || Лекция 17 || Лекция 18 >
Использование указателей на структуры значительно расширяет возможности использования массивов структур, в частности, создание связанных списков, сортировка структур и т.д. (об этом речь пойдет позже). Доступ к отдельным элементам структуры осуществляется с помощью оператора "стрелка" (arrow).
Следующая программа иллюстрирует сказанное. Переменная-массив foliant[m] и указатель *manuscript связаны со структурой следующим оператором:
struct book foliant[m], *manuscript;
Адрес массива foliant копируется в переменную-указатель *manuscript при помощи оператора:
manuscript=&foliant[0];
//==========================================================
// Name : struct_card.cpp
// Author : Marat
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//==========================================================
#include <iostream>
using namespace std;
#define n 50
#define m 20
char newline;
int i, array_size;
struct book{char author[n];
char titel[n];
int year;
};
int main() {
void print(struct book *any_book);
struct book foliant[m], *manuscript;//Указатель на структуру
manuscript=&foliant[0];
cout<<"\nHow many book in your library? ";
cin>>array_size;
for(i=0;i<array_size;i++)
{
cin.get(newline);
cout<<"\nInput #"<<i+1<<" author's name, please ";
cin.get(manuscript->author,49);
cin.get(newline);
cout<<"\nInput #"<<i+1<<" book's titel, please ";
cin.get(manuscript->titel,49,'\n');
cin.get(newline);
cout<<"\nInput #"<<i+1<<" appearance year, please ";
cin>>manuscript->year;
manuscript++;
}
manuscript=&foliant[0];
print(manuscript);
return 0;
}
void print(struct book *any_book)
{
for(i=0;i<array_size;i++)
{
cout<<"\n#"<<i+1<<" author's name is "<<any_book->author;
cout<<"\n#"<<i+1<<" book's titel is "<<any_book->titel;
cout<<"\n#"<<i+1<<" book's appearance year is "<<any_book->year;
any_book++;
}
cout<<"\n"<<endl;
}
Результат:
How many book in your library? 2 Input #1 author's name please Raymond Murphy Input #1 book's titel please English Grammar in Use Input #1 appearance year please 1996 Input #2 author's name please Klaus Ebert Input #2 book's titel please Komputereranwendungen in der Chemie Input #2 appearance year please 1985 #1 author's name is Raymond Murphy #1 book's titel is English Grammar in Use #1 book's appearance year is 1996 #2 author's name is Klaus Ebert #2 book's titel is Komputereranwendungen in der Chemie #2 book's appearance year is 1985
< Лекция 16 || Лекция 17 || Лекция 18 >