Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования Π‘ΠΈ. ИзданиС 3-Π΅, исправлСнноС». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 35

Автор Π‘Ρ€Π°ΠΉΠ°Π½ ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½

char datatype[MAXTOKEN]; /* Ρ‚ΠΈΠΏ = char, int ΠΈ Ρ‚.Π΄. */

char out[1000]; /* Π²Ρ‹Π΄Π°Π²Π°Π΅ΠΌΡ‹ΠΉ тСкст */


main() /* ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ объявлСния Π² словСсноС описаниС */

{

 while (gettoken() != EOF) {/* 1-я лСксСма Π² строкС */

  strcpy(datatype, token); /* это Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… */

  out[0] = '\0';

  dcl(); /* Ρ€Π°Π·Π±ΠΎΡ€ ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠΉ части строки */

  if (tokentype != '\n')

   printf("синтаксичСская ошибка\n");

  printf("%s: %s %s\n", name, out, datatype);

 }

 return 0;

}

Ѐункция gettoken пропускаСт ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ ΠΈ табуляции ΠΈ Π·Π°Ρ‚Π΅ΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ лСксСму ΠΈΠ· Π²Π²ΠΎΠ΄Π°: "лСксСма" (token) - это имя, ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π° ΠΊΡ€ΡƒΠ³Π»Ρ‹Ρ… скобок, ΠΈΠ»ΠΈ ΠΏΠ°Ρ€Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок (Π±Ρ‹Ρ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚, с ΠΏΠΎΠΌΠ΅Ρ‰Π΅Π½Π½Ρ‹ΠΌ Π² Π½ΠΈΡ… числом), ΠΈΠ»ΠΈ любой Π΄Ρ€ΡƒΠ³ΠΎΠΉ Π΅Π΄ΠΈΠ½ΠΈΡ‡Π½Ρ‹ΠΉ символ.

int gettoken(void) /* Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΡƒΡŽ лСксСму */

{

 int с, getch(void);

 void ungetch(int);

 char *p = token;


 while ((c = getch()) == ' ' || с == '\t')

  ;

 if (c == '(') {

  if ((c = getch()) == ')' {

   strcpy(token, "()");

   return tokentype = PARENS;

  } else {

   ungetch(c);

   return tokentype = '(';

  }

 } else if (c == '[') {

  for (*p++ = c; (*p++ = getch()) != ']';)

   ;

  *p = '\0';

  return tokentype = BRACKETS;

 } else if (isalpha(c)) {

  for (*p++ = c; isalnum(c = getch());)

  *p++ = c;

  *p = '\0';

  ungetch(c);

  return tokentype = NAME;

 } else

 return tokentype = c;

}

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ getch ΠΈ ungetch Π±Ρ‹Π»ΠΈ рассмотрСны Π² Π³Π»Π°Π²Π΅ 4.

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ рСализуСтся Π»Π΅Π³Ρ‡Π΅, особСнно Ссли Π½Π΅ ΠΏΡ€ΠΈΠ΄Π°Π²Π°Ρ‚ΡŒ значСния Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ лишниС скобки. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° undcl ΠΏΡ€Π΅Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ„Ρ€Π°Π·Ρƒ Π²Ρ€ΠΎΠ΄Π΅ "x Π΅ΡΡ‚ΡŒ функция, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π°Ρ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° массив ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ char", ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Π² Π²ΠΈΠ΄Π΅

Ρ… () * [] * () char

в объявлСниС

char (*(*Ρ…())[])()

Π’Π°ΠΊΠΎΠΉ сокращСнный Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ синтаксис позволяСт ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ gettoken. Ѐункция undcl ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Ρ‚Π΅ ΠΆΠ΅ самыС внСшниС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, Ρ‡Ρ‚ΠΎ ΠΈ dcl.

/* undcl: ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ словСсноС описаниС Π² объявлСниС */

main()

{

 int type;

 char temp[MAXTOKEN];


 while (gettoken() != EOF) {

  strcpy(out, token);

  while ((type = gettoken()) != '\n')

   if (type == PARENS || type == BRACKETS)

    strcat(out, token);

   else if (type == '*') {

    sprintf(temp, "(*%s)", out);

    strcpy(out, temp);

   } else if (type == NAME) {

    sprintf(temp, "%s %s", token, out);

    strcpy(out, temp);

   } else

    printf("Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ элСмСнт %s Π² Ρ„Ρ€Π°Π·Π΅\n", token);

  printf("%s\n", out);

 }

 return 0;

}

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.18. Π’ΠΈΠ΄ΠΎΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ dcl Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π° ошибки Π²ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.19. ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠΉΡ‚Π΅ undcl Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½Π° Π½Π΅ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π»Π° Π»ΠΈΡˆΠ½ΠΈΡ… скобок.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.20. Π Π°ΡΡˆΠΈΡ€ΡŒΡ‚Π΅ возмоТности dcl, Ρ‡Ρ‚ΠΎΠ±Ρ‹ dcl ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»Π° объявлСния с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π°ΠΌΠΈ Π²Ρ€ΠΎΠ΄Π΅ const ΠΈ Ρ‚. ΠΏ.

Π“Π»Π°Π²Π° 6. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° - это ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ нСсколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ²), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ для удобства Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½ΠΈΠΌΠΈ сгруппированы ΠΏΠΎΠ΄ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠΌΠ΅Π½Π΅ΠΌ. (Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… языках, Π² частности Π² ПаскалС, структуры Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ записями.) Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΠΏΠΎΠΌΠΎΠ³Π°ΡŽΡ‚ Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ слоТных Π΄Π°Π½Π½Ρ‹Ρ… (особСнно Π² Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ…), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π³Ρ€ΡƒΠΏΠΏΡƒ связанных ΠΌΠ΅ΠΆΠ΄Ρƒ собой ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚Ρ€Π°ΠΊΡ‚ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ ΠΊΠ°ΠΊ мноТСство ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹Ρ… элСмСнтов, Π° ΠΊΠ°ΠΊ Π΅Π΄ΠΈΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅.

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ структуры - строка ΠΏΠ»Π°Ρ‚Π΅ΠΆΠ½ΠΎΠΉ вСдомости. Она содСрТит Ρ‚Π°ΠΊΠΈΠ΅ свСдСния ΠΎ слуТащСм, ΠΊΠ°ΠΊ Π΅Π³ΠΎ ΠΏΠΎΠ»Π½ΠΎΠ΅ имя, адрСс, Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚ΠΎΡ‡ΠΊΠΈ ΡΠΎΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ страхования, Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π° ΠΈ Ρ‚. Π΄. НСкоторыС ΠΈΠ· этих характСристик сами ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ структурами: Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΠΎΠ»Π½ΠΎΠ΅ имя состоит ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ (Ρ„Π°ΠΌΠΈΠ»ΠΈΠΈ, ΠΈΠΌΠ΅Π½ΠΈ ΠΈ отчСства); Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ адрСс, ΠΈ Π΄Π°ΠΆΠ΅ Π·Π°Ρ€ΠΏΠ»Π°Ρ‚Π°. Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ для Π‘ΠΈ) - ΠΈΠ· области Π³Ρ€Π°Ρ„ΠΈΠΊΠΈ: Ρ‚ΠΎΡ‡ΠΊΠ° Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚, ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊ Π΅ΡΡ‚ΡŒ ΠΏΠ°Ρ€Π° Ρ‚ΠΎΡ‡Π΅ΠΊ ΠΈ Ρ‚. Π΄.

Π“Π»Π°Π²Π½Ρ‹Π΅ измСнСния, внСсСнныС стандартом ANSI Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ структур, - это Π²Π²Π΅Π΄Π΅Π½ΠΈΠ΅ для Π½ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Π½Π°Π΄ Π½ΠΈΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания, ΠΈΡ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ функциям Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ², Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΡ… Π² качСствС Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ². Π’ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π΅ компиляторов ΡƒΠΆΠ΅ Π΄Π°Π²Π½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹ эти возмоТности, Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΠ½ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠ³ΠΎΠ²ΠΎΡ€Π΅Π½Ρ‹ стандартом. Для автоматичСских структур ΠΈ массивов Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ допускаСтся инициализация.

6.1 ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ свСдСния ΠΎ структурах

БконструируСм нСсколько графичСских структур. Π’ качСствС основного ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° выступаСт Ρ‚ΠΎΡ‡ΠΊΠ° с ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π°ΠΌΠΈ x ΠΈ y Ρ†Π΅Π»ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°.

Π£ΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π΄Π²Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² структуру, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½ΡƒΡŽ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

struct point {int x; int y;};

ОбъявлСниС структуры начинаСтся с ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова struct ΠΈ содСрТит список объявлСний, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки. Π—Π° словом struct ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ имя, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Ρ‚Π΅Π³ΠΎΠΌ структуры (ΠΎΡ‚ английского слова tag - ярлык, этикСтка. - ΠŸΡ€ΠΈΠΌΠ΅Ρ‡. ΠΏΠ΅Ρ€.), point Π² нашСм случаС. Π’Π΅Π³ Π΄Π°Π΅Ρ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ структурС Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π° ΠΈ Π΄Π°Π»Π΅Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ ΠΊΡ€Π°Ρ‚ΠΊΠΈΠΌ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ‚ΠΎΠΉ части объявлСния, которая Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π° Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки.

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½Π½Ρ‹Π΅ Π² структурС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ элСмСнтами (members - Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… изданиях, Π² Ρ‚ΠΎΠΌ числС Π²ΠΎ 2-ΠΌ ΠΈΠ·Π΄Π°Π½ΠΈΠΈ Π½Π° русским языкС этой ΠΊΠ½ΠΈΠ³ΠΈ structure members пСрСводится ΠΊΠ°ΠΊ Ρ‡Π»Π΅Π½Ρ‹ структуры. - ΠŸΡ€ΠΈΠΌΠ΅Ρ‡. Ρ€Π΅Π΄). ИмСна элСмСнтов ΠΈ Ρ‚Π΅Π³ΠΎΠ² Π±Π΅Π· ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ»Π»ΠΈΠ·ΠΈΠΉ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… (Ρ‚. Π΅. Π½Π΅ элСмСнтов), Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ всСгда Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΌΡ‹ ΠΏΠΎ контСксту. Π‘ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ΄Π½ΠΈ ΠΈ Ρ‚Π΅ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π° элСмСнтов ΠΌΠΎΠ³ΡƒΡ‚ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Ρ‚ΡŒΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… структурах, хотя, Ссли ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌΡƒ ΡΡ‚ΠΈΠ»ΡŽ программирования, Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π° Π΄Π°Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π±Π»ΠΈΠ·ΠΊΠΈΠΌ ΠΏΠΎ смыслу ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ.

ОбъявлСниС структуры опрСдСляСт Ρ‚ΠΈΠΏ. Π—Π° ΠΏΡ€Π°Π²ΠΎΠΉ Ρ„ΠΈΠ³ΡƒΡ€Π½ΠΎΠΉ скобкой, Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ список элСмСнтов, ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ послС названия любого Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

struct {…} x, y, z;

с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния синтаксиса Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ

int Ρ…, Ρƒ, z;

Π² Ρ‚ΠΎΠΌ смыслС, Ρ‡Ρ‚ΠΎ ΠΈ Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ x, y ΠΈ z ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°; ΠΈ Ρ‚ΠΎ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚ ΠΊ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΡŽ памяти ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π°.

ОбъявлСниС структуры, Π½Π΅ содСрТащСй списка ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π΅ Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ памяти; ΠΎΠ½ΠΎ просто описываСт шаблон, ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† структуры. Однако Ссли структура ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅Π³, Ρ‚ΠΎ этим Ρ‚Π΅Π³ΠΎΠΌ Π΄Π°Π»Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ структурных ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². НапримСр, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹ΡˆΠ΅ описания структуры point строка

struct point pt;

опрСдСляСт ΡΡ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ pt Ρ‚ΠΈΠΏΠ° struct point. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π½ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΠΏΡ€ΠΈ Π΅Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, формируя список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Π΅Π΅ элСмСнтов Π² Π²ΠΈΠ΄Π΅ константных Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ:

struct point maxpt = {320, 200};

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ автоматичСскиС структуры ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ присваиваниСм ΠΈΠ»ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰Π΅ΠΉ структуру ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°.

Доступ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ элСмСнту структуры осущСствляСтся посрСдством конструкции Π²ΠΈΠ΄Π°:

имя-структуры.элСмСнт

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ доступа ΠΊ элСмСнту структуры . соСдиняСт имя структуры ΠΈ имя элСмСнта. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Ρ‚ΠΎΡ‡ΠΊΠΈ pt, годится ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ printf:

printf("%d, %d", pt.x, pt.y);

Π”Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ расстояниС ΠΎΡ‚ Π½Π°Ρ‡Π°Π»Π° ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚ (0,0) Π΄ΠΎ pt, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ

double dist, sqrt(double); dist = sqrt((double)pt.x * pt.x + (double)pt.y * pt.y);

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π»ΠΎΠΆΠ΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ Π² Π΄Ρ€ΡƒΠ³Π°. Одно ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… прСдставлСний ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ° - это ΠΏΠ°Ρ€Π° Ρ‚ΠΎΡ‡Π΅ΠΊ Π½Π° ΡƒΠ³Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· Π΅Π³ΠΎ Π΄ΠΈΠ°Π³ΠΎΠ½Π°Π»Π΅ΠΉ:

struct rect {struct point pt1; struct point pt2;};

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° rect содСрТит Π΄Π²Π΅ структуры point. Если ΠΌΡ‹ объявим screen ΠΊΠ°ΠΊ

struct rect screen;

Ρ‚ΠΎ

screen.pt1.x

обращаСтся ΠΊ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π΅ x Ρ‚ΠΎΡ‡ΠΊΠΈ pt1 ΠΈΠ· screen.

6.2 Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

ЕдинствСнно Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ структурами - это ΠΈΡ… ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, присваиваниС, взятиС адрСса с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ & ΠΈ осущСствлСниС доступа ΠΊ Π΅Π΅ элСмСнтам. ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ присваиваниС Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Ρƒ функциям Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΈΠΌΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ нСльзя ΡΡ€Π°Π²Π½ΠΈΠ²Π°Ρ‚ΡŒ. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ структуру ΠΌΠΎΠΆΠ½ΠΎ списком константных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΅Π΅ элСмСнтов; Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ структуру Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ присваиваниСм.