Структуры
Инициализация структуры
Инициализация структуры заключается в присваивании начальных значений элементам структуры. Структуры могут быть проинициализированы при их объявлении.
Инициализирующая запись – это заключенный в фигурные скобки список, элементы которого разделяются запятыми и являются константами. Любые неинициализированные элементы внешних или статических структур по умолчанию равны 0. Значения неинициализированных элементов автоматических структур не определены.
Для инициализации структур значения ее полей перечисляются в фигурных скобках.
Например:
Первый способ
struct Student { char name[20]; int kurs; float rating; }; Student s={"Королев",1,3.5};
Второй способ
struct { char name[20]; char title[30]; float rate; } employee={"Петров", "программист",58000};
В соответствии с синтаксисом языка компонентами структур могут быть данные любых типов, за исключением функций и структур того же типа, что и определяемый тип. Элементом структуры может быть структура, тип которой уже определен.
Например:
stuct mix {int N; double *d;} struct hole { struct mix exit; float b; }
Присваивание структур
Для переменных одного и того же структурного типа определена операция присваивания. При этом происходит поэлементное копирование.
Student t=s;
Информация, содержащаяся в одной структуре, может быть присвоена другой структуре того же типа с помощью одиночного оператора присваивания, то есть не нужно присваивать значение каждого члена по отдельности.
Например:
#include <stdio.h> void main(){ struct { int a; int b; } x, y; x.a = 10; x.b = 20; y = x; printf("Содержимое y: %d %d", y.a, y.b); }
Доступ к элементам структур (полям данных)
С помощью операций прямого и косвенного выбора (соответственно символы точка '.' и '->') организуется доступ к элементам структур. Первая операция используется со структурными объектами, а вторая – при наличии указателя на структурный объект.
Операция прямого доступа к элементам структуры ('.') – результатом является значение элемента структуры.
Синтаксис операции прямого доступа к элементам структуры:
ИмяСтруктуры.ИмяЭлементаСтруктуры
Данная операция используется для доступа к элементу структуры с тем, чтобы присвоить ему значение, напечатать его, использовать его значение в арифметической операции и т.д. Эта операция является первичной и находится в самой верхней строке таблицы приоритетов операций языка С++.
Именем структуры можно пользоваться сразу же после его появления в программе.
Например:
struct A { int j; char titl[10]; char x; } Аа, Аb = {128,"Мир",'Q'};
Здесь допустимы операторы присваивания вида Аа=Аb;. В этом случае элементы структурного объекта Аа будут иметь значения, совпадающие со значениями соответствующих элементов объекта Аb.
Пример 1.
//Инициализация структуры и вывод значений ее элементов #include "stdafx.h" #include <iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { struct goods { char* name; long price; float percent; int vol; char date[9]; }; struct goods coat={"пиджак черный",4000,7.5,220,"12.01.09"}; printf("\n Товар на складе:"); printf("\n Наименование: %s.", coat.name); printf("\n Оптовая цена: %ld руб.", coat.price); printf("\n Наценка: %3.1f %%.", coat.percent); printf("\n Цена товара: %ld руб.", (long)(coat.price*(1.0+coat.percent/100))); printf("\n Объем партии: %d штук.", coat.vol); printf("\n Дата поставки: %s.",coat.date); system("pause"); return 0; }
Пример 2. Сложение комплексных чисел
#include "stdafx.h" #include <iostream> using namespace std; typedef struct { double real; double imag; } complex; int _tmain(int argc, _TCHAR* argv[]) { complex x,y,z; printf("\n Введите два комплексных числа:"); printf("\n Вещественная часть:"); scanf("%lf", &x.real); printf("\n Мнимая часть:"); scanf("%lf", &x.imag); printf("\n Вещественная часть:"); scanf("%lf", &y.real); printf("\n Мнимая часть:"); scanf("%lf", &y.imag); z.real=x.real+y.real; z.imag=x.imag+y.imag; printf("\n Результат: z.real=%f z.imag=%f", z.real,z.imag); system("pause"); return 0; }