Структуры
Инициализация структуры
Инициализация структуры заключается в присваивании начальных значений элементам структуры. Структуры могут быть проинициализированы при их объявлении.
Инициализирующая запись – это заключенный в фигурные скобки список, элементы которого разделяются запятыми и являются константами. Любые неинициализированные элементы внешних или статических структур по умолчанию равны 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;
}
