Статические структуры могут быть проинициализированы подобно массивам:
static GOODS a = { "Телепвизор", 14000.0, 20};
Необходимо строго следитьза соответствием порядка констант порядку элементов структуры.
Структура целиком может быть передана функции как параметр. Кроме того, структура может быть полностью возвращена как значение функции.
Пример:
typedef struct { double r, f;} POLAR;
typedef struct { double x, y;} DECART;
DECART ptod(POLAR pcoord)
{
DECART dcoord;
dcoord.x = pcoord.r*cos(pcoord.f);
dcoord.y = pcoord.r*sin(pcoord.f);
return dcoord;
}
void main(void)
{
DECART a; POLAR b = { 15.2, 0.18};
a = ptod(b);
.
.
.
}
Для больших структур такой способ передачи параметров и возврата значений неэффективен, так как компилятору приходится создавать копии параметров и результатов работы функции в специальной области памяти.
(*dc) в скобках потому, что "." имеет более высший приоритет. Головная программа при этом выглядит так:
void main(void)
{
DECART a; POLAR b = { 15.2, 0.18};
ptod(&a, &b);
.
.
.
}
Запись вида (*dc).x громоздка и плохо понятна. Поэтому разработчики языка C предусмотрели более понятную эквивалентную запись:
(*dc).x эквивалентно dc->x.
Используя ее:
void ptod(DECART *dc, POLAR *pc)
{
dc->x = pc->r*cos(pc->f);
dc->y = pc->r*sin(pc->f);
}
Для целых чисел допускается использовать область памяти меньше байта:
struct {
int c1:4; -8<c1<7
int c2:12 -2 <c2<2 -1
} ab;
ab.c1 будет преобразовано в целый тип, затем будет использоваться. На преобразование тратится время и память. Рекомендуется использовать для беззнаковых типов данных и в крайних случаях.
/* Пример использования структур */
#include <stdio.h>
#include <string.h>
#include <math.h>
typedef struct {
char name[21];
int number;
float price;
} GOODS;
void in_goods ( GOODS gs[], int *n );
int in_goods1 ( GOODS *g );
void out_goods ( GOODS gs[], int n );
void sort_goods ( GOODS gs[], int n);
void main( void )
{
int n; GOODS goods[100];
in_goods ( goods, &n );
sort_goods ( goods, n );
out_goods ( goods, n );
{ float f=0; sin(f); }
}
void in_goods( GOODS gs[], int *n)
{
printf("Введите характеристики товаров в виде:\n" \