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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«C++Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 11

Автор ΠœΡŽΡ€Ρ€Π΅ΠΉ Π₯ΠΈΠ»Π»

Π¦Π΅Π»Ρ‹ΠΉ Ρ‚ΠΈΠΏ char Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄ΠΎΠ±Π΅Π½ для хранСния ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ символов Π½Π° Π΄Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ это 8-Π±ΠΈΡ‚ΠΎΠ²Ρ‹ΠΉ Π±Π°ΠΉΡ‚. Π Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Π‘++ Π²Ρ‹Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Π² Π΅Π΄ΠΈΠ½ΠΈΡ†Π°Ρ… Ρ€Π°Π·ΠΌΠ΅Ρ€Π° char, ΠΏΠΎΡ‚ΠΎΠΌΡƒ ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ sizeof(char)==1. Π’ зависимости ΠΎΡ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ обСспСчСния char являСтся Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΈΠ»ΠΈ Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ Ρ†Π΅Π»Ρ‹ΠΌ. Π’ΠΈΠΏ unsigned char, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, всСгда Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ, ΠΈ ΠΏΡ€ΠΈ Π΅Π³ΠΎ использовании ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ пСрСносимыС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ ΠΈΠ·-Π·Π° примСнСния Π΅Π³ΠΎ вмСсто просто char ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Ρ‚ΡŒ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π² эффСктивности.

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

1==sizeof(char)Β«=sizeof(short)Β«= sizeof(int)Β«=sizeof(long) sizeof(float)Β«=sizeof(double)

Однако ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² char ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Ρ†Π΅Π»Ρ‹Π΅ числа Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ 0..127 (Π² Π½Π΅ΠΌ всСгда ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ символы машинного Π½Π°Π±ΠΎΡ€Π° символов), Ρ‡Ρ‚ΠΎ short ΠΈ int ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 16 Π±ΠΈΡ‚, Ρ‡Ρ‚ΠΎ int ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Ρ†Π΅Π»ΠΎΠΉ Π°Ρ€ΠΈΡ„ΠΌΠ΅Ρ‚ΠΈΠΊΠ΅, ΠΈ Ρ‡Ρ‚ΠΎ long ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎ мСньшСй ΠΌΠ΅Ρ€Π΅ 24 Π±ΠΈΡ‚Π°. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Ρ‡Ρ‚ΠΎ-Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΌΠΈΠΌΠΎ этого рискованно, ΠΈ Π΄Π°ΠΆΠ΅ эти эмпиричСскиС ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ Π½Π΅ Π²Π΅Π·Π΄Π΅. Π’Π°Π±Π»ΠΈΡ†Ρƒ характСристик Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ обСспСчСния для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… машин ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² #с. 2.6.

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

unsigned surprise = -1;

допустимо (Π½ΠΎ компилятор ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ сдСлаСт ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠ΅).

2.3.2 НСявноС ΠŸΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π’ΠΈΠΏΠ°

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΌΠΎΠΆΠ½ΠΎ свободно ΡΠΎΡ‡Π΅Ρ‚Π°Ρ‚ΡŒ Π² присваиваниях ΠΈ выраТСниях. Π’Π΅Π·Π΄Π΅, Π³Π΄Π΅ это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, значСния ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ информация Π½Π΅ Ρ‚Π΅Ρ€ΡΠ»Π°ΡΡŒ. Π’ΠΎΡ‡Π½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² #с.6.6.

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

int i1 = 256+255; char ch = i1 // ch == 255 int i2 = ch; // i2 == ?

Π’ присваивании ch=i1 тСряСтся ΠΎΠ΄ΠΈΠ½ Π±ΠΈΡ‚ (самый Π·Π½Π°Ρ‡ΠΈΠΌΡ‹ΠΉ!), ΠΈ ch Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Π΄Π²ΠΎΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ «всС-Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹Β» (Ρ‚.Π΅. 8 Π΅Π΄ΠΈΠ½ΠΈΡ†); ΠΏΡ€ΠΈ присваивании i2 это Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ прСвратится Π² 511! Но ΠΊΠ°ΠΊΠΈΠΌ ΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ i2? На DEC VAX, Π³Π΄Π΅ char Π·Π½Π°ΠΊΠΎΠ²ΠΎΠ΅, ΠΎΡ‚Π²Π΅Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ -1, Π½Π° AT amp;T 3B-20, Π³Π΄Π΅ char Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹Π΅, ΠΎΡ‚Π²Π΅Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ 255. Π’ Π‘++ Π½Π΅Ρ‚ динамичСского (Ρ‚.Π΅. Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π²ΠΎ врСмя исполнСния) ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° для Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€ΠΎΠ΄Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π° выяснСниС Π½Π° стадии компиляции Π²ΠΎΠΎΠ±Ρ‰Π΅ ΠΎΡ‡Π΅Π½ΡŒ слоТно, поэтому программист Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π΅Π½.

2.3.3 ΠŸΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Π΅ Π’ΠΈΠΏΡ‹

Π”Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΠ· основных Ρ‚ΠΈΠΏΠΎΠ² (ΠΈ Ρ‚ΠΈΠΏΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ) посрСдством ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ описания:

* ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ amp; ссылка [] Π²Π΅ΠΊΡ‚ΠΎΡ€ () функция

ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ° опрСдСлСния структур. НапримСр:

int* a; float v[10]; char* p[20]; // Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈΠ· 20 ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° символ void f(int); struct str (* short length; char* p; *);

ΠŸΡ€Π°Π²ΠΈΠ»Π° построСния Ρ‚ΠΈΠΏΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ ΠΎΠ±ΡŠΡΡΠ½ΡΡŽΡ‚ΡΡ Π² #с.8.3-4. Основная идСя состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ описаниС ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Π΅Π³ΠΎ использованиС. НапримСр:

int v[10]; // описываСт Π²Π΅ΠΊΡ‚ΠΎΡ€ i = v[3]; // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ элСмСнт Π²Π΅ΠΊΡ‚ΠΎΡ€Π°

int* p; // описываСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ i = *p; // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚

Вся ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ понимания записи ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² проистСкаСт ΠΈΠ· Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ * ΠΈ amp; прСфиксныС, Π° ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ [] () постфиксныС, поэтому для Ρ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π² Ρ‚Π΅Ρ… случаях, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚Ρ‹ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ затруднСния, Π½Π°Π΄ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ скобки. НапримСр, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ Ρƒ [] Π²Ρ‹ΡˆΠ΅, Ρ‡Π΅ΠΌ Ρƒ *, Ρ‚ΠΎ

int* v[10]; // Π²Π΅ΠΊΡ‚ΠΎΡ€ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ int (*p)[10]; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€

Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ людСй просто помнят, ΠΊΠ°ΠΊ выглядят Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹.

ОписаниС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π²Π²ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΡƒΡ‚ΠΎΠΌΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, особСнно Ссли ΠΈΡ… Ρ‚ΠΈΠΏΡ‹ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹. Но ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π² ΠΎΠ΄Π½ΠΎΠΌ описании нСсколько ΠΈΠΌΠ΅Π½. Π’ этом случаС описаниС содСрТит вмСсто ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ список ΠΈΠΌΠ΅Π½, Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… запятыми. НапримСр, Π΄Π²Π° ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

int x, y; // int x; int y;

ΠŸΡ€ΠΈ описании ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π°ΠΌ (Π° Π½Π΅ ΠΊΠΎ всСм ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΈΠΌΠ΅Π½Π°ΠΌ Π² этом описании). НапримСр:

int* p, y; // int* p; int y; НЕ int* y; int x, *p; // int x; int* p; int v[10], *p; // int v[10]; int* p;

МнСниС Π°Π²Ρ‚ΠΎΡ€Π° Ρ‚Π°ΠΊΠΎΠ²ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ конструкции Π΄Π΅Π»Π°ΡŽΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΌΠ΅Π½Π΅Π΅ ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΠΉ, ΠΈ ΠΈΡ… слСдуСт ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ.

2.3.4 Π’ΠΈΠΏ void

Π’ΠΈΠΏ void (пустой) синтаксичСски Π²Π΅Π΄Π΅Ρ‚ сСбя ΠΊΠ°ΠΊ основной Ρ‚ΠΈΠΏ. Однако ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² Ρ‚ΠΈΠΏΠ° void Π½Π΅ сущСствуСт. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ функция Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ значСния, ΠΈΠ»ΠΈ ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ для ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ нСизвСстного Ρ‚ΠΈΠΏΠ°.

void f() // f Π½Π΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ void* pv; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ нСизвСстного Ρ‚ΠΈΠΏΠ°

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° void (void *), ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ любого Ρ‚ΠΈΠΏΠ°. На ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ взгляд это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π½Π΅ особСнно ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ void* нСльзя Ρ€Π°Π·ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ, Π½ΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ это ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ ΠΈ Π΄Π΅Π»Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ void* ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ. Π“Π»Π°Π²Π½Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΎΠ½ примСняСтся для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ функциям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΎ Ρ‚ΠΈΠΏΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, ΠΈ для Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π½Π΅Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ явноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΈΠΏΠ°. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ находятся Π½Π° самом Π½ΠΈΠΆΠ½Π΅ΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ систСмы, Ρ‚Π°ΠΌ, Π³Π΄Π΅ осущСствляСтся Ρ€Π°Π±ΠΎΡ‚Π° с основными Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌΠΈ рСсурсами. НапримСр:

void* allocate(int size); // Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ void deallocate(void*); // ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ

f() (* int* pi = (int*)allocate(10*sizeof(int)); char* pc = (char*)allocate(10); //... deallocate(pi); deallocate(pc); *)

2.3.5 Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ

Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Ρ‚ΠΈΠΏΠΎΠ² T T* являСтся Ρ‚ΠΈΠΏΠΎΠΌ арифмСтичСский ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° T. Π’ΠΎ Π΅ΡΡ‚ΡŒ, Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Ρ‚ΠΈΠΏΠ° T* ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ адрСс ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° T. Для ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π°ΠΌ, ΠΊ соТалСнию, придСтся ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±ΠΎΠ»Π΅Π΅ слоТной записью:

int* pi; char** cpp; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° char int (*vp)[10]; // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈΠ· 10 int'ΠΎΠ² int (*fp)(char, char*); // ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ //ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΡƒΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹(char, char*) // ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΡƒΡŽ int

Основная опСрация Π½Π°Π΄ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ – Ρ€Π°Π·Ρ‹ΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ ссылка Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ. Π­Ρ‚Π° опСрация Ρ‚Π°ΠΊΠΆΠ΅ называСтся косвСнным ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ΠΌ. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ разымСнования – это ΡƒΠ½Π°Ρ€Π½ΠΎΠ΅ * (прСфиксноС). НапримСр:

char c1 = 'a'; char* p = amp;c1; // Π² p хранится адрСс c1 char c2 = *p; // c2 = 'a'

ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Π°Ρ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ p,– это c1, Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ хранится Π² c1, это 'a', поэтому присваиваСмоС c2 Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ *p Π΅ΡΡ‚ΡŒ 'a'.

Над указатСлями ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ арифмСтичСскиС дСйствия. Π’ΠΎΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, функция, ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰Π°Ρ число символов Π² строкС (Π½Π΅ считая Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽΡ‰Π΅Π³ΠΎ 0):

int strlen(char* p) (* int i = 0; while (*p++) i++; return i; *)

Π”Ρ€ΡƒΠ³ΠΎΠΉ способ Π½Π°ΠΉΡ‚ΠΈ Π΄Π»ΠΈΠ½Ρƒ состоит Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ сначала Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΠ½Π΅Ρ† строки, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Ρ‹Ρ‡Π΅ΡΡ‚ΡŒ адрСс Π½Π°Ρ‡Π°Π»Π° строки ΠΈΠ· адрСса Π΅Π΅ ΠΊΠΎΠ½Ρ†Π°:

int strlen(char* p) (* char* q = p; while (*q++) ; return q-p-1; *)

ΠžΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Они ΠΎΠ±ΡΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² #4.6.7.

2.3.6 Π’Π΅ΠΊΡ‚ΠΎΡ€Π°

Для Ρ‚ΠΈΠΏΠ° T T[size] являСтся Ρ‚ΠΈΠΏΠΎΠΌ Β«Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈΠ· size элСмСнтов Ρ‚ΠΈΠΏΠ° TΒ». Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ (Π½ΡƒΠΌΠ΅Ρ€ΡƒΡŽΡ‚ΡΡ) ΠΎΡ‚ 0 Π΄ΠΎ size-1. НапримСр:

float v[3]; // Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈΠ· Ρ‚Ρ€Π΅Ρ… float: v[0], v[1], v[2] int a[2][5]; // Π΄Π²Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈΠ· пяти int char* vpc; // Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈΠ· 32 ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Π½Π° символ

Π¦ΠΈΠΊΠ» для ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ Ρ†Π΅Π»Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π±ΡƒΠΊΠ² Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистра ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‚Π°ΠΊ:

extern int strlen(char*);

char alpha[] = Β«abcdefghijklmnoprstuvwxyzΒ»;

main()


(* int sz = strlen(alpha);

for (int i=0; iΒ«sz; i++) (* char ch = alpha[i]; cout β€žβ€ž "'" β€žΒ« chr(ch) «« "'" «« " = " «« ch «« Β« = 0β€œ «« oct(ch) «« Β« = 0xβ€œ «« hex(ch) «« Β«\nβ€œ; *) *)

Ѐункция chr() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ прСдставлСниС нСбольшого Ρ†Π΅Π»ΠΎΠ³ΠΎ Π² Π²ΠΈΠ΄Π΅ строки; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, chr(80) это "P" Π½Π° машинС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π°Π±ΠΎΡ€ символов ASCII. Ѐункция oct() строит Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ прСдставлСниС своСго Ρ†Π΅Π»ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°, Π° hex() строит ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ прСдставлСниС своСго Ρ†Π΅Π»ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°; chr() oct() ΠΈ hex() описаны Π² Β«stream.hΒ». Ѐункция strlen() использовалась для подсчСта числа символов Π² alpha; вмСсто этого ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° alpha (#2.4.4). Если примСняСтся Π½Π°Π±ΠΎΡ€ символов ASCII, Ρ‚ΠΎ Π²Ρ‹Π΄Π°Ρ‡Π° выглядит Ρ‚Π°ΠΊ:

'a' = 97 = 0141 = 0x61 'b' = 98 = 0142 = 0x62 'c' = 99 = 0143 = 0x63 ...

Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Π²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° alpha Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ считаСт число символов Π² символьной строкС, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² качСствС ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°. ИспользованиС строки ΠΊΠ°ΠΊ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° для Π²Π΅ΠΊΡ‚ΠΎΡ€Π° символов – ΡƒΠ΄ΠΎΠ±Π½ΠΎΠ΅, Π½ΠΎ ΠΊ соТалСнию ΠΈ СдинствСнноС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ строк. АналогичноС этому присваиваниС строки Π²Π΅ΠΊΡ‚ΠΎΡ€Ρƒ отсутствуСт. НапримСр: