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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВстраиваСмыС систСмы. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… сСмСйства 68HC12/HCS12 с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ языка Π‘Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 23

Автор Π‘Ρ‚ΠΈΠ²Π΅Π½ Π‘Π°Ρ€Ρ€Π΅Ρ‚Ρ‚

3.9.4. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ SWITCH

Π”Π°Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ примСняСтся, ΠΊΠΎΠ³Π΄Π° трСбуСтся ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², Π² зависимости ΠΎΡ‚ значСния выраТСния. Бинтаксис ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch:

1  switch(<Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅>)

2  {

3  case <константноС_Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅_1>:

4   <ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€_1>;

5   break;

6  case <константноС_Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅_2>:

7   <ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€_2>;

8   break;

9   :

10  :

11 case <константноС_Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅_n>:

12  <ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€_n>;

13  break;

14 default :

15  <ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€_n+1>;

16 }

Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch начинаСтся с вычислСния выраТСния Π² скобках. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ вычислСния Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ цСлочислСнным Π² ΠΎΠ΄Π½ΠΎ ΠΈΠ»ΠΈ Π΄Π²ΡƒΡ…Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Π—Π°Ρ‚Π΅ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ прСфиксы case, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ послС Π½ΠΈΡ… константныС выраТСния Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ ΠΈ ΠΈΡ… Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΡΡ€Π°Π²Π½ΠΈΠ²Π°ΡŽΡ‚ΡΡ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ вычислСния выраТСния Π² скобках послС слова switch. Если Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚, Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаётся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π·Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ прСфиксом case. Если Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ совпадСния Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΠΈ ΠΏΡ€ΠΈ этом ΡƒΠΊΠ°Π·Π°Π½ΠΎ слуТСбноС слово default (Π΅Π³ΠΎ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ), Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ пСрСдаётся ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Π·Π° этим слуТСбным словом. Если совпадСния Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΎΡΡŒ, Π° слуТСбноС слово default Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ, Ρ‚ΠΎ Π½ΠΈ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π±Π»ΠΎΠΊΠ° Π½Π΅ выполняСтся. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² константных выраТСниях послС прСфиксов case Π½Π΅ допускаСтся примСнСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΡΡ‚ΠΎΡΡ‚ΡŒ ΠΈΠ· константных Π²Π΅Π»ΠΈΡ‡ΠΈΠ½.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования конструкции с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ switch:

1  switch (a) {

2  case 1:

3   printf("Correct value%d was chosen\n", a);

4   break;

5  case 2:

6   printf("Close but try again\n");

7   break;

8  case 3:

9   printf("Value %d is two away from the answer\n", a);

10  break;

11 default:

12  printf("Your chosen value is way off\n");

13 }

Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a сравниваСтся со значСниями 1, 2 ΠΈ 3. Π–Π΅Π»Π°Π΅ΠΌΠΎΠ΅ сообщСниС ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΠΌ Π²Ρ‹Π±ΠΎΡ€Π΅ появится Π½Π° экранС ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€Π° Π² Ρ‚ΠΎΠΌ случаС, Ссли пСрСмСнная Ρ€Π°Π²Π½Π° 1. Если ΠΆΠ΅ пСрСмСнная Ρ€Π°Π²Π½Π° 2 ΠΈΠ»ΠΈ 3, Ρ‚ΠΎ Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²Π΅Π΄Π΅Π½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ сообщСния ΠΎΠ± ΠΎΡˆΠΈΠ±ΠΊΠ°Ρ…. Если Π½ΠΈ ΠΎΠ΄Π½ΠΎ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½ΠΎ, Ρ‚ΠΎ отобразится сообщСниС, записанноС Π² строкС 12. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π·Π°ΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ слово break Π² строкС 13, Ρ‚.ΠΊ. послС выполнСния ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° строки 12 ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° автоматичСски ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ исполнСниС ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π·Π° конструкциСй switch ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ².

А ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ вСсти сСбя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Ссли ΠΌΡ‹ пропустим слово break Π³Π΄Π΅ Ρ‚ΠΎ Π² сСрСдинС конструкции switch, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² строкС 4? ПослС отобраТСния сообщСния строки 3 ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅Ρ‚ ΠΊ исполнСнию ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΏΠΎΠΊΠ° Π½Π΅ встрСтит ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ слово break ΠΈΠ»ΠΈ Π½Π΅ Π΄ΠΎΠΉΠ΄Π΅Ρ‚ Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° конструкции switch. Π’ нашСм случаС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ сообщСниС строки 6, Π° Π·Π°Ρ‚Π΅ΠΌ прСдаст ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ строкС 13. Зная ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° switch, Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ нСсколько break Π² своСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

3.10. ΠœΠ°ΡΡΠΈΠ²Ρ‹

Массив опрСдСляСт Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΎΠ΄Π½ΠΎΡ‚ΠΈΠΏΠ½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈΠ·Π½Π°ΠΊΠΎΠΌ массива слуТит использованиС ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобок послС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π² ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках указываСтся количСство элСмСнтов массива (Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€), Π° ΠΏΡ€ΠΈ использовании Π² выраТСниях β€” индСкс Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ элСмСнта. ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΌΠΎΠ³ΡƒΡ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ элСмСнты Π² любом ΠΈΠ· Ρ€Π°Π½Π΅Π΅ рассмотрСнных Ρ‚ΠΈΠΏΠΎΠ² прСдставлСния Π΄Π°Π½Π½Ρ‹Ρ…: char, int, float double. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ опрСдСлСния массива ΠΈΠ· 10 Π΄Π²ΡƒΡ…Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… цСлочислСнных элСмСнтов:

int list[10];

Π”Π°Π½Π½ΠΎΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π°Ρ€Π΅Π·Π΅Ρ€Π²ΠΈΡ€ΡƒΠ΅Ρ‚ Π² памяти МК 20 ΠΎΠ΄Π½ΠΎΠ±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… ячССк памяти. Π’ выраТСниях ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ доступ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ элСмСнту массива Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ с использованиСм индСкса. ИндСкс Π² Π‘ΠΈ автоматичСски отсчитываСтся с 0. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ индСкс ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ значСния ΠΎΡ‚ 0 Π΄ΠΎ 9 Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ. Как ΠΈ любая другая пСрСмСнная, массив ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ объявлСн с ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. Для этого Π² ΠΏΡ€Π°Π²ΠΎΠΉ части ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ присваивания Β«=Β» Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках, Ρ‡Π΅Ρ€Π΅Π· Π·Π°ΠΏΡΡ‚ΡƒΡŽ ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ значСния всСх элСмСнтов массива:

int list[10] = {1,2,3,4,5,6,7,8,9,10};

Если ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ массива Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π΅ указываСтся, Ρ‚Π°ΠΊΠΎΠΉ массив ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ явно ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΡ€ΠΈ этом компилятор автоматичСски ΠΏΡ€ΠΈΡ€Π°Π²Π½ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива ΠΊ числу ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… элСмСнтов.

int list[] = {1,2,3,4,5,6,7,8,9,10}; // Π Π°Π·ΠΌΠ΅Ρ€ массива Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π²Π΅Π½

 //числу ΠΏΡ€ΠΎΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… Ρ‚.Π΅. 10

Π’Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ΅ число ΠΏΠ΅Ρ€Π²Ρ‹Ρ… элСмСнтов массива с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ:

int list[10]= {1,2,3,4,5,}; // Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… пяти элСмСнтов

 //массива, состоящСго ΠΈΠ· 10 элСмСнтов

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

char message[6]= "Smile";

char message[]= "Smile";

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива message[0] содСрТит ΠΊΠΎΠ΄ символа Β«SΒ», послСдний элСмСнт message[5] β€” ΠΊΠΎΠ΄ ΠΊΠΎΠ½Ρ†Π° строки 0x00.

Массив ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌ. ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ опрСдСляСтся количСством индСксов массива. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ опрСдСлСния Π΄Π²ΡƒΡ…ΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива:

int matrix[2],[3];

По Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с ΠΎΠ΄Π½ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΌΠΈ массивами, для ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹Ρ… массивов Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° инициализация Π² процСссС Π΅Π³ΠΎ опрСдСлСния:

int matrix[2],[3]= {1,2,3}{4,5,6};

ΠœΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½Ρ‹ΠΉ массив Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Π² памяти Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ порядкС:

m[0][0] m[0][1] m[0][2] m[1][0] m[1][1] m[1][2]

ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ элСмСнтам ΠΌΠ½ΠΎΠ³ΠΎΠΌΠ΅Ρ€Π½ΠΎΠ³ΠΎ массива осущСствляСтся посрСдством указания сразу Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… индСксов. Π’Π°ΠΊ послС выполнСния ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ выраТСния пСрСмСнная m ΠΏΡ€ΠΈΠΌΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 6:

m = matrix[1][2]

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

for (i=0, i<100, i++) odd[i] = odd[i] + 1;

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

3.11. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ

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

Для опрСдСлСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ указатСля ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ *:

int *ptr

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

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π² Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ особого внимания программистов, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ с указатСлями связано основноС количСство ошибок Π² исходном тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π‘ΠΈ. ΠŸΡ€ΠΈ ΠΌΠ°Π½ΠΈΠΏΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ указатСлями, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ присваивания слСдуСт ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ Π² ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΌ использовании Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…. ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ примСнСния указатСля: