- •Структура — это группа связанных переменных.
- •struct inv_type
- •Чтобы с помощью этой структуры
- •struct inv_type
- •Если для программы достаточно только
- •Общий формат объявления
- •Доступ к членам структуры
- •Следовательно, чтобы вывести значение
- •с помощью этого кода можно
- •Массивы структур
- •Разрабатываемая программа должна обеспечить выполнение следующих действий:
- •int main()
- •// Инициализация массива структур.
- •// Получение команды меню, выбранной пользователем.
- •char *strchr(const char *str, int ch);
- •// Ввод элементов в инвентарную ведомость.
- •// Ввод информации.
- •// Модификация существующего элемента. void update()
- •// Отображение на экране инвентарной ведомости. void display()
- •Передача структур функциям
- •Присваивание структур
- •Эта программа генерирует следующие
- •struct stype1
- •Использование указателей на
- •Чтобы найти адрес структурной
- •struct bal {
- •К членам структуры можно получить
- •Указатель на структуру можно
- •Первый тип time_t, предназначен для
- •Структура tm имеет следующий формат.
- •Основным средством определения
- •Чтобы преобразовать календарное
- •// Эта программа отображает текущее системное время.
- •Вот один из возможных результатов
- •Ссылки на структуры
- •// Функция, которая получает и возвращает ссылку на
// Отображение на экране инвентарной ведомости. void display()
{
int t;
for(t=0; t<SIZE; t++ )
{
if(*invtry[t].item)
{
cout << invtry[t].item << '\n';
cout << "Стоимость: $" << invtry[t].cost;
cout << "\nB розницу: $";
cout << invtry[t].retail << '\n';
cout << "В наличии: " << invtry[t].on_hand;
cout << "\nДо пополнения осталось: ";
cout << invtry[t].lead_time << " дней\n\n";
}}
}
Передача структур функциям
При передаче функции структуры в качестве аргумента используется механизм передачи параметров по значению.
Это означает, что любые изменения, внесенные в содержимое структуры в теле функции, которой она передана, не влияют на структуру, используемую в качестве аргумента.
#include <iostream> using namespace std;
// Определяем тип структуры. struct sample {
int a;
char ch;
};
void f1(sample parm); int main()
{
struct sample arg; // Объявляем переменную arg типа sample.
arg.a = 1000;
arg.ch = 'x';
f1(arg);
return 0;
}
void f1(sample parm)
{
cout << parm.a << " " << parm.ch << "\n";
}
Присваивание структур
Содержимое одной структуры можно присвоить другой, если обе эти структуры имеют одинаковый тип.
#include <iostream> using namespace std; struct stype {
int a, b;
};
int main()
{
stype svar1, svar2;
svar1.a = svar1.b = 10;
svar2.a = svar2.b = 20;
cout << "Структуры до присваивания.\n";
cout << "svar1: " << svar1.a << ' ' << svar1.b;
cout <<'\n';
cout << "svar2: " << svar2.a << ' ' << svar2.b;
cout <<"\n\n";
svar2 = svar1; // присваивание структур
cout << "Структуры после присваивания.\n";
cout << "svar1: " << svar1.a << ' ' << svar1.b;
cout << '\n';
cout << "svar2: " << svar2.a << ' ' << svar2.b;
return 0;
}
Эта программа генерирует следующие
результаты.
Структуры до присваивания
svar1: 10 10
svar2: 20 20
Структуры после присваивания
svar1: 10 10
svar2: 10 10
В C++ каждое новое объявление
структуры определяет новый тип.
Следовательно, даже если две структуры физически одинаковы, но имеют разные имена типов, компилятор будет считать их разными и не позволит присвоить значение одной из них другой.
struct stype1
{
int a, b;
};
struct stype2
{
int a, b;
};
stype1 svar1; stype2 svar2;
svar2 = svar1; // Ошибка из-за несоответствия типов.
Использование указателей на
структуры и оператора "стрелка»
Указатель на структуру объявляется так же, как указатель на любую другую переменную, т.е. с помощью символа "*", поставленного перед именем структурной переменной.
Например, используя определенную выше структуру inv_type, можно записать следующую инструкцию, которая объявляет переменную inv_pointer указателем на данные типа
inv_type:
Чтобы найти адрес структурной
переменной, необходимо перед ее именем разместить оператор "&".