Опубликован: 10.12.2015 | Уровень: для всех | Доступ: платный
Лекция 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 >
Зося Ковалева
Зося Ковалева

Хочу получить удостоверение. Сколько стоит оплата?

Aleksey Aplaev
Aleksey Aplaev
Россия, Chelybinsk
Александр Сидоров
Александр Сидоров
Россия, Самара