Π¦Π΅Π»ΡΠΉ ΡΠΈΠΏ 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 Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ. ΠΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΡΡΠΈΡΠ°Π΅Ρ ΡΠΈΡΠ»ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ°. ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ ΠΊΠ°ΠΊ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ° Π΄Π»Ρ Π²Π΅ΠΊΡΠΎΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² β ΡΠ΄ΠΎΠ±Π½ΠΎΠ΅, Π½ΠΎ ΠΊ ΡΠΎΠΆΠ°Π»Π΅Π½ΠΈΡ ΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠ΅ ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΡΡΠΎΠΊ. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ΅ ΡΡΠΎΠΌΡ ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π½ΠΈΠ΅ ΡΡΡΠΎΠΊΠΈ Π²Π΅ΠΊΡΠΎΡΡ ΠΎΡΡΡΡΡΡΠ²ΡΠ΅Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ: