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

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

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

структуры-ΠΈΠ»ΠΈ-объСдинСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ { список-объявлСний-структуры }

ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Π΅Π³ΠΎΠΌ структуры ΠΈΠ»ΠΈ объСдинСния, спСцифицированных списком. ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ объявлСниС Π² Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΈΠ»ΠΈ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области видимости ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ Ρ‚ΠΈΠΏΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π² спСцификаторС Ρ‚Π΅Π³ Π±Π΅Π· списка:

структуры-ΠΈΠ»ΠΈ-объСдинСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

Если спСцификатор с Ρ‚Π΅Π³ΠΎΠΌ, Π½ΠΎ Π±Π΅Π· списка появляСтся Ρ‚Π°ΠΌ, Π³Π΄Π΅ Ρ‚Π΅Π³ Π½Π΅ объявлСн, спСцифицируСтся Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ. ΠžΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ с Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΈΠΏΠΎΠΌ структуры ΠΈΠ»ΠΈ объСдинСния ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒΡΡ Π² контСкстС, Π³Π΄Π΅ Π½Π΅ трСбуСтся Π·Π½Π°Ρ‚ΡŒ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ - Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½ΠΈΡΡ… (Π½ΠΎ Π½Π΅ опрСдСлСниях) для описания указатСля ΠΈΠ»ΠΈ создания typedef, Π½ΠΎ Π½Π΅ Π² ΠΈΠ½Ρ‹Ρ… случаях. Π’ΠΈΠΏ становится Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΈ появлСнии ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ спСцификатора с этим Ρ‚Π΅Π³ΠΎΠΌ, содСрТащСго список объявлСний. Π”Π°ΠΆΠ΅ Π² спСцификаторах со списком ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅ΠΌΡ‹ΠΉ Ρ‚ΠΈΠΏ структуры ΠΈΠ»ΠΈ объСдинСния являСтся Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΌ Π²Π½ΡƒΡ‚Ρ€ΠΈ списка ΠΈ становится Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΌ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ послС появлСния символа }, Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π³ΠΎ спСцификатор.

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

ОсобоС ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ примСняСтся ΠΊ объявлСниям Π²ΠΈΠ΄Π°

структуры-ΠΈΠ»ΠΈ-объСдинСния ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ;

ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ структуру ΠΈΠ»ΠΈ объСдинСниС, Π½ΠΎ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ списка объявлСния ΠΈ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅Π»Ρ. Π”Π°ΠΆΠ΅ Ссли ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚Π΅Π³ структуры ΠΈΠ»ΠΈ объСдинСния Π²ΠΎ внСшнСй области видимости (A11.1), это объявлСниС Π΄Π΅Π»Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚Π΅Π³ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΉ структуры ΠΈΠ»ΠΈ объСдинСния Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области видимости.

Π­Ρ‚ΠΎ Π½Π΅Π²Ρ€Π°Π·ΡƒΠΌΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ - Π½ΠΎΠ²ΠΎΠ΅ Π² ANSI. Оно ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ для Π²Π·Π°ΠΈΠΌΠ½ΠΎ рСкурсивных структур, ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Π½Ρ‹Ρ… Π²ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΉ области видимости, Π½ΠΎ Ρ‚Π΅Π³ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΆΠ΅ ΠΎΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ Π²ΠΎ внСшнСй области видимости.

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

ИмСна элСмСнтов ΠΈ Ρ‚Π΅Π³ΠΎΠ² Π½Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‚ Π΄Ρ€ΡƒΠ³ с Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΈΠ»ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ. Имя элСмСнта Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΠ²Π»ΡΡ‚ΡŒΡΡ Π΄Π²Π°ΠΆΠ΄Ρ‹ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ структурС ΠΈΠ»ΠΈ объСдинСнии, Π½ΠΎ Ρ‚ΠΎΡ‚ ΠΆΠ΅ элСмСнт ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… структурах ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡΡ….

Π’ ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ этой ΠΊΠ½ΠΈΠ³ΠΈ ΠΈΠΌΠ΅Π½Π° элСмСнтов структуры ΠΈ объСдинСния Π½Π΅ ΡΠ²ΡΠ·Ρ‹Π²Π°Π»ΠΈΡΡŒ со своими родитСлями. Однако Π² компиляторах эта связь стала ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠΉ Π·Π°Π΄ΠΎΠ»Π³ΠΎ Π΄ΠΎ появлСния стандарта ANSI.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ структуры ΠΈΠ»ΠΈ объСдинСния, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΏΠΎΠ»Π΅ΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ любой Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. ПолС (ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚Π΅Π»Ρ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ бСзымянным) ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ int, unsigned int ΠΈΠ»ΠΈ signed int ΠΈ интСрпрСтируСтся ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ цСлочислСнного Ρ‚ΠΈΠΏΠ° ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² Π±ΠΈΡ‚Π°Ρ… Π΄Π»ΠΈΠ½Ρ‹. БчитаСтся Π»ΠΈ ΠΏΠΎΠ»Π΅ int Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΈΠ»ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ, зависит ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. БосСдний элСмСнт-ΠΏΠΎΠ»Π΅ упаковываСтся Π² ячСйки памяти Π² зависимости ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² зависящСм ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ. Когда ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ Π·Π° ΠΏΠΎΠ»Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΎΠ΅ ΠΏΠΎΠ»Π΅ Π½Π΅ Π²Π»Π΅Π·Π°Π΅Ρ‚ Π² частично Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡƒΡŽ ячСйку памяти, ΠΎΠ½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ячСйками, ΠΈΠ»ΠΈ ячСйка ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°Π±ΠΈΡ‚Π° балластом. БСзымянноС ΠΏΠΎΠ»Π΅ Π½ΡƒΠ»Π΅Π²ΠΎΠΉ ΡˆΠΈΡ€ΠΈΠ½Ρ‹ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚Π°ΠΊΠΎΠΉ Π·Π°Π±ΠΈΠ²ΠΊΠ΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ»Π΅ начнСтся с края ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ячСйки памяти.

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ ANSI Π΄Π΅Π»Π°Π΅Ρ‚ поля Π΅Ρ‰Π΅ Π±ΠΎΠ»Π΅Π΅ зависимыми ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‡Π΅ΠΌ Π² ΠΏΠ΅Ρ€Π²ΠΎΠΉ Ρ€Π΅Π΄Π°ΠΊΡ†ΠΈΠΈ ΠΊΠ½ΠΈΠ³ΠΈ. Π§Ρ‚ΠΎΠ±Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π±ΠΈΡ‚ΠΎΠ²Ρ‹Π΅ поля Π² "зависящСм ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ" Π²ΠΈΠ΄Π΅ Π±Π΅Π· ΠΊΠ²Π°Π»ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° языка. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Ρ‹ с Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΌΠΈ полями ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ пСрСносимым способом для ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ памяти ΠΏΠΎΠ΄ структуру (вСроятно, Ρ†Π΅Π½ΠΎΠΉ увСличСния ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° доступ ΠΊ полям) ΠΈΠ»ΠΈ нСпСрСносимым способом для описания распрСдСлСния памяти Π½Π° Π±ΠΈΡ‚ΠΎΠ²ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅. Π’ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° мСстной Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ структуры ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ объявлСния элСмСнтов адрСса. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ структуры, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΠ΅ΡΡ полями, Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΏΠΎ Π³Ρ€Π°Π½ΠΈΡ†Π°ΠΌ адрСсов Π² зависимости ΠΎΡ‚ своСго Ρ‚ΠΈΠΏΠ°; Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π² структурС ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ бСзымянныС Π΄Ρ‹Ρ€Ρ‹. Если ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° структуру приводится ΠΊ Ρ‚ΠΈΠΏΡƒ указатСля Π½Π° Π΅Π΅ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт, Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт.

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

Π’ΠΎΡ‚ простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€ объявлСния структуры:

struct tnode {

    char tword[20];

    int count;

    struct tnode *left;

    struct tnode *right;

};

Π­Ρ‚Π° структура содСрТит массив ΠΈΠ· 20 символов, число Ρ‚ΠΈΠΏΠ° int ΠΈ Π΄Π²Π° указатСля Π½Π° ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ структуру. Если Π΄Π°Π½ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ объявлСниС, Ρ‚ΠΎ

struct tnode s, *sp;

ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ s ΠΊΠ°ΠΊ структуру Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π°, a sp - ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚Π°ΠΊΡƒΡŽ структуру. Богласно ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΌ опрСдСлСниям Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

sp->count

обращаСтся ΠΊ элСмСнту count Π² структурС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ sp;

s.left

- ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π»Π΅Π²ΠΎΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²ΠΎ Π² структурС s, Π°

s.right->tword[0]

- это ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ ΠΈΠ· tword - элСмСнта ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ ΠΏΠΎΠ΄Π΄Π΅Ρ€Π΅Π²Π° s.

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

union {

    struct {

        int type;

    } n;


    struct {

        int type;

        int intnode;

    } ni;


    struct {

        int type;

        float floatnode;

    } nf;

} u;


...


u.nf.type = FLOAT;

u.nf.floatnode = 3.14;

...


if (u.n.type == FLOAT)

... sin(u.nf.floatnode) ...

A8.4. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ

ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»Π΅Π½ΠΈΡ - это ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ, значСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ΡΡ мноТСством ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹Ρ… констант, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… пСрСчислитСлями. Π’ΠΈΠ΄ спСцификатора пСрСчислСния заимствован Ρƒ структур ΠΈ объСдинСний.

спСцификатор-пСрСчислСния:

    enum ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π½Π΅ΠΎΠ± {список-пСрСчислитСлСй}

    enum ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

список-пСрСчислитСлСй:

    ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ

    список-пСрСчислитСлСй , ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ

ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ:

    ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€

    ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ = константноС-Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, входящиС Π² список пСрСчислитСлСй, ΠΎΠ±ΡŠΡΠ²Π»ΡΡŽΡ‚ΡΡ константами Ρ‚ΠΈΠΏΠ° int ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒΡΡ Π²Π΅Π·Π΄Π΅, Π³Π΄Π΅ трСбуСтся константа. Если Π² этом спискС Π½Π΅Ρ‚ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ пСрСчислитСля со Π·Π½Π°ΠΊΠΎΠΌ =, Ρ‚ΠΎ значСния констант Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ΡΡ с 0 ΠΈ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° 1 ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ чтСния объявлСния слСва Π½Π°ΠΏΡ€Π°Π²ΠΎ. ΠŸΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒ со Π·Π½Π°ΠΊΠΎΠΌ = Π΄Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅; ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π΅ΡΡΠΈΡŽ ΠΎΡ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ значСния.

ИмСна пСрСчислитСлСй, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² ΠΎΠ΄Π½ΠΎΠΉ области видимости, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° ΠΈ ΠΎΡ‚ ΠΈΠΌΠ΅Π½ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΈΡ… значСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΈ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ.

Роль ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° Π² ΠΏΠ΅Ρ€Π΅Ρ‡-спСцификаторС Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° Ρ€ΠΎΠ»ΠΈ Ρ‚Π΅Π³Π° структуры Π² структ-спСцификаторС: ΠΎΠ½ являСтся ΠΈΠΌΠ΅Π½Π΅ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ пСрСчислСния. ΠŸΡ€Π°Π²ΠΈΠ»Π° для списков ΠΈ ΠΏΠ΅Ρ€Π΅Ρ‡-спСцификаторов (с Ρ‚Π΅Π³Π°ΠΌΠΈ ΠΈ Π±Π΅Π·) Ρ‚Π΅ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ для спСцификаторов структур ΠΈΠ»ΠΈ объСдинСний, с Ρ‚ΠΎΠΉ лишь ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΊΠΎΠΉ, Ρ‡Ρ‚ΠΎ элСмСнты пСрСчислСний Π½Π΅ Π±Ρ‹Π²Π°ΡŽΡ‚ Π½Π΅Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°; Ρ‚Π΅Π³ ΠΏΠ΅Ρ€Π΅Ρ‡-спСцификатора Π±Π΅Π· списка пСрСчислитСлСй Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… области видимости спСцификатор со списком.