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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ Π‘ΠΈ - руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 72

Автор M. УЭИВ

"Π‘Π΅Π³ΠΈ, CΠΏΠΎΡ‚, Π±Π΅Π³ΠΈ! - "сказал Π”ΠΈΠΊ.

     CΡ‚Ρ€ΠΎΠΊΠΎΠ²Ρ‹Π΅ константы Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ Π² статичСской памяти. Вся Ρ„Ρ€Π°Π·Π° Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ… являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° мСсто Π² памяти, Π³Π΄Π΅ записана строка. Π­Ρ‚ΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ использованию ΠΈΠΌΠ΅Π½ΠΈ массива, слуТащСго ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° располоТСниС массива. Если это Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚Π°ΠΊ, Ρ‚ΠΎ ΠΊΠ°ΠΊ выглядит ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ строку?

/* строки Π² качСствС ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ */

main( )

{

printf("%s, %u, %c \n", "We", "love", *"figs");

     Π˜Ρ‚Π°ΠΊ, Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ %s Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ строку We. Π€ΠΎΡ€ΠΌΠ°Ρ‚ %u Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Ρ†Π΅Π»ΠΎΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠ°. Если слово "love" являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ, Ρ‚ΠΎ выдаСтся Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΡΠ²Π»ΡΡŽΡ‰Π΅Π΅ΡΡ адрСсом ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа строки. НаконСц, *"figs" Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Ρ‹Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ссылаСтся адрСс, Ρ‚. Π΅. ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ строки "figs". ΠŸΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ Π»ΠΈ это Π½Π° самом Π΄Π΅Π»Π΅? Π”Π°, ΠΌΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ тСкст:

We, 34, f

Ну, Π²ΠΎΡ‚! Π”Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ вСрнСмся ΠΊ строкам, находящимся Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… массивах.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… строк ΠΈ ΠΈΡ… инициализация

     ΠŸΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ массива ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… строк Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠΎΠΎΠ±Ρ‰ΠΈΡ‚ΡŒ компилятору Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти. Один ΠΈΠ· способов ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это - ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ массив ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ строковой константы. Π’Π°ΠΊ ΠΊΠ°ΠΊ автоматичСскиС массивы нСльзя ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ для этого ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ статичСскиС ΠΈΠ»ΠΈ внСшниС массивы. НапримСр, ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

char m1[ ] = "Волько ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡŒΡ‚Π΅ΡΡŒ ΠΎΠ΄Π½ΠΎΠΉ строкой.";

ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π» внСшний (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) массив m1 для ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ строки. Π­Ρ‚ΠΎΡ‚ Π²ΠΈΠ΄ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ являСтся ΠΊΡ€Π°Ρ‚ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠΎΠΉ стандартной ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массива

char m1[ ] = {'В', 'о', 'л', 'ь', 'к', 'о', ' ',

                   'ΠΎ', 'Π³', 'Ρ€', 'Π°', 'Π½', 'ΠΈ', 'Ρ‡',

                   'ь', 'Ρ‚', 'e', 'с', 'ь', ' ', 'ΠΎ',

                   'Π΄', 'Π½', 'ΠΎ', 'ΠΉ', ' ', 'с', 'Ρ‚',

                   'Ρ€' 'ΠΎ', 'ΠΊ', 'ΠΎ', 'ΠΉ', ' .', '\0'};

(ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π·Π°ΠΌΡ‹ΠΊΠ°ΡŽΡ‰ΠΈΠΉ Π½ΡƒΠ»ΡŒ-символ. Π‘Π΅Π· Π½Π΅Π³ΠΎ ΠΌΡ‹ ΠΈΠΌΠ΅Π΅ΠΌ массив символов, Π° Π½Π΅ строку.) Для Ρ‚ΠΎΠΉ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ (Π° ΠΌΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΠ΅Ρ€Π²ΡƒΡŽ) компилятор подсчитываСт символы ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива.

Как ΠΈ для Π΄Ρ€ΡƒΠ³ΠΈΡ… массивов, имя m1 являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт массива:


m1 == &m1[0], *m1 == 'Π’', ΠΈ *(m1 + l) == m1[1] == 'ΠΎ',


Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ для создания строки. НапримСр:


char *m3 = " \n Достаточно ΠΎΠ±ΠΎ ΠΌΠ½Π΅ - ΠΊΠ°ΠΊ вас Π·ΠΎΠ²ΡƒΡ‚?";


Π­Ρ‚ΠΎ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ ΠΈ


static char m3[ ] = "\n Достаточно ΠΎΠ±ΠΎ ΠΌΠ½Π΅ - ΠΊΠ°ΠΊ вас Π·ΠΎΠ²ΡƒΡ‚?" ;

Оба описания говорят ΠΎΠ± ΠΎΠ΄Π½ΠΎΠΌ: m3 являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ строки со словами " Как вас Π·ΠΎΠ²ΡƒΡ‚?" . Π’ Ρ‚ΠΎΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌ случаС сама строка опрСдСляСт Ρ€Π°Π·ΠΌΠ΅Ρ€ памяти, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠΉ для Π΅Π΅ размСщСния. Однако Π²ΠΈΠ΄ ΠΈΡ… Π½Π΅ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π΅Π½.

Массив ΠΈΠ»ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ

     Π’ Ρ‡Π΅ΠΌ ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° Ρ€Π°Π·Π½ΠΈΡ†Π° ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя описаниями? ОписаниС с массивом Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ созданиС Π² статичСской памяти массива ΠΈΠ· 38 элСмСнтов (ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ Π½Π° ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ плюс ΠΎΠ΄ΠΈΠ½ Π½Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰ΠΈΠΉ символ '\0'. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт инициализируСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ символом. Π’ дальнСйшСм компилятор Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ имя m3 ΠΊΠ°ΠΊ синоним адрСса ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ элСмСнта массива, Ρ‚. Π΅. &m3[0]. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ m3 являСтся константой указатСля. Π’Ρ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ m3, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ это ΠΎΠ·Π½Π°Ρ‡Π°Π»ΠΎ Π±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ полоТСния (адрСс) массива Π² памяти. МоТно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ m3+1, для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ элСмСнта массива, ΠΎΠ΄Π½Π°ΠΊΠΎ Π½e Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ++m3. ОпeΡ€Π°Ρ‚ΠΎΡ€ увСличСния ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ с ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½ΠΎ Π½Π΅ констант.

     Π€ΠΎΡ€ΠΌΠ° с ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ созданиС Π² статичСской памяти 38 элСмСнтов для запоминания строки. Но, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, выдСляСтся Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ячСйка памяти для ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ m3, ΡΠ²Π»ΡΡŽΡ‰Π΅ΠΉΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ. Π‘Π½Π°Ρ‡Π°Π»Π° эта пСрСмСнная ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ строки, Π½ΠΎ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ увСличСния; ++m3 Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π²Ρ‚ΠΎΡ€ΠΎΠΉ символ строки (Π”). Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ объявили *m3 статичСской Π½Π΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈ Π½Π΅ массив ΠΈΠ· 38 элСмСнтов, Π° ΠΎΠ΄Π½Ρƒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. НС сущСствуСт ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° класс памяти ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π΅ ΡΠ²Π»ΡΡŽΡ‰ΠΈΡ…ΡΡ массивом.

     Π‘ущСствСнны Π»ΠΈ эти отличия? Π§Π°Ρ‰Π΅ всСго Π½Π΅Ρ‚, Π½ΠΎ всС зависит ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ ΠΏΡ‹Ρ‚Π°Π΅Ρ‚Π΅ΡΡŒ Π΄Π΅Π»Π°Ρ‚ΡŒ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ², Π° ΠΌΡ‹ возвращаСмся ΠΊ вопросу выдСлСния памяти для строк.

Массив ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ: различия

     Π’ Π½ΠΈΠΆΠ΅ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ тСкстС ΠΌΡ‹ обсудим различия Π² использовании описаний этих Π΄Π²ΡƒΡ… Π²ΠΈΠ΄ΠΎΠ²:

static char heart[ ] ="Я люблю Вилли !";

char *head ="Я люблю Милли!";

     ΠžΡΠ½ΠΎΠ²Π½ΠΎΠ΅ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ heart являСтся константой, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ head - ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠŸΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π½Π° самом Π΄Π΅Π»Π΅ даст эта Ρ€Π°Π·Π½ΠΈΡ†Π°.


Π’o-ΠΏepΠ²Ρ‹Ρ…, ΠΈ Π² Ρ‚ΠΎΠΌ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ слоТСния с ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ.

for(i = 0; i < 6; i++ )

putchar(*(heart + i));

putchar('\n');

for(i = 0; i < 6; i++ )

putchar(*(head + i));

putchar('\n');


Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ

Я люблю Я люблю

Но Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² случаС с ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ увСличСния:

while( *(head) != '\0') /* останов ΠΈ ΠΊΠΎΠ½Ρ†Π΅ строки */

putchar(*(head++ )); /* ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ символа ΠΈ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ указатСля */

Π΄Π°ΡŽΡ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅:

Π― люблю ΠœΠ˜Π›Π›Π˜!

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ head Π½Π° heart. ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ cΠΊΠ°Π·Π°Ρ‚ΡŒ

head = heart /* Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ head ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° массив hΠ΅art */

Π½ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ

heart =  head; /* запрСщСнная конструкция */

     Π‘итуация Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Π° Ρ… = 3 ΠΈΠ»ΠΈ 3 = Ρ…; лСвая Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° присваивания Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС head = heart; Π½Π΅ ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠΈΡ‚ строку Милли, Π° Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ адрСс, записанный Π² head. Π’ΠΎΡ‚ ΠΊΠ°ΠΊΠΈΠΌ ΠΏΡƒΡ‚Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ heart ΠΈ ΠΏΡ€ΠΎΠ½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ Π² сам массив:

heart[8] = 'М';

ΠΈΠ»ΠΈ

*(heart + 8) = 'М';

Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ массива (Π½ΠΎ Π½Π΅ имя) ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ

Π―Π²Π½ΠΎΠ΅ Π·Π°Π΄Π°Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° памяти

     Π˜Π½ΠΎΠΉ ΠΏΡƒΡ‚ΡŒ выдСлСния памяти Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² явном Π΅Π΅ Π·Π°Π΄Π°Π½ΠΈΠΈ. Π’ΠΎ внСшнСм описании ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ‹ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ:

char m1[44] = "Волько ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡŒΡ‚Π΅ΡΡŒ ΠΎΠ΄Π½ΠΎΠΉ строкой.";

вмСсто

char m1[ ] = "Волько ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΡŒΡ‚Π΅ΡΡŒ ΠΎΠ΄Π½ΠΎΠΉ строкой.";

     ΠœΠΎΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ, Ρ‡Ρ‚ΠΎ число элСмСнтов ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π½Π° ΠΎΠ΄ΠΈΠ½ (это снова Π½ΡƒΠ»ΡŒ-символ) большС, Ρ‡Π΅ΠΌ Π΄Π»ΠΈΠ½Π° строки. Как ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… статичСских ΠΈΠ»ΠΈ Π²Π½Π΅ΡˆΠ½ΠΈΡ… массивах, Π»ΡŽΠ±Ρ‹Π΅ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹Π΅ элСмСнты автоматичСски ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π½ΡƒΠ»Π΅ΠΌ (ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² символьном Π²ΠΈΠ΄Π΅ являСтся Π½ΡƒΠ»ΡŒ-символом, Π° Π½Π΅ символом Ρ†ΠΈΡ„Ρ€Ρ‹ Π½ΡƒΠ»ΡŒ).

РИБ. 13.2. Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ массива.

     ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π² нашСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ массиву name Π·Π°Π΄Π°Π½ Ρ€Π°Π·ΠΌΠ΅Ρ€:


char name [81];

     ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ массив name Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒΡΡ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρƒ компилятора Π½Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ способа ΡƒΠ·Π½Π°Ρ‚ΡŒ Π·Π°Ρ€Π°Π½Π΅Π΅, сколько памяти Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ для массива. Π­Ρ‚ΠΎ нс символьная константа, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ компилятор ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ символы. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠ»ΠΈ, Ρ‡Ρ‚ΠΎ 80 символов Π±ΡƒΠ΄Π΅Ρ‚ достаточно, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² массив Ρ„Π°ΠΌΠΈΠ»ΠΈΡŽ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… строк

     ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Π±Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ массив ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Ρ… строк. Π’ этом случаС ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ индСкс для доступа ΠΊ нСскольким Ρ€Π°Π·Π½Ρ‹ΠΌ строкам. ПокаТСм это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅:

static char *mytal[LIM] = {"Быстро ΡΠΊΠ»Π°Π΄Ρ‹Π²Π°ΡŽ числа",

                                "Π’ΠΎΡ‡Π½ΠΎ ΡƒΠΌΠ½ΠΎΠΆΠ°ΡŽ",

                                "Π—Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽ Π΄Π°Π½Π½Ρ‹Π΅",

                                "ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹",

                                "Понимаю язык Π‘ΠΈ"};

     Π Π°Π·Π±Π΅Ρ€Π΅ΠΌΡΡ Π² этом описании. Вспомним, Ρ‡Ρ‚ΠΎ LIM ΠΈΠΌΠ΅Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 5, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ mytal являСтся массивом, состоящим ΠΈΠ· пяти ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ строки. КаТдая строка символов, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, прСдставляСт собой ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ массив, поэтому Ρƒ нас Π΅ΡΡ‚ΡŒ ΠΏΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° массивы. ΠŸΠ΅Ρ€Π²Ρ‹ΠΌ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ являСтся mytal[0], ΠΈ ΠΎΠ½ ссылаСтся Π½Π° ΠΏΠ΅Ρ€Π²ΡƒΡŽ строку. Π’Ρ‚ΠΎΡ€ΠΎΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ mytal[1] ссылаСтся Π½Π° Π²Ρ‚ΠΎΡ€ΡƒΡŽ строку. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π² частности, ссылаСтся Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ своСй строки:

*mytal[0] == 'Π‘', *mytal[1] == 'Π’', mytal[2] == 'Π—'