!#"
2.6 Arrays and pointers
$%'&)(*,+.-/*0+21435&+6&7879&:<;=*>1@?.3BAC1EDF&HGI*0+.-J&LKNM9*,O,OP:Q%9787R3B7KS*>MFT9%8U
:V3B+(1@?.%W&)T8*,OX*,1>:Y3[Z\93BDW]^O_%814%E+`3BaI*b\9%RMEUT8:c1@?.%E1>*,DF%d:V3BAY-)%81e1@?C&H1
78*0-B?)1>f:V3BA5&7R%g+`3hOi3B+.-%R7h&j\'3BDW]^O_%814%k+`3Ba#*l\9%Im
npoI&78+`%rq21>7R3BACMR1>78As]2futvWvwq21>:sOi%c&+(Jx%'\8?+y*lz8A{%k|~}k
x?*>MMI%'\81>*b3B+Q*,+21>793I(Ap\'%8M&787'&:M&HM\93B+21b&*0+`%R7!MZI3B7
MI%'z8A{%R+`\9%RMS3[Z3T,o#%9\R1@MS3[Z
@1 ?.%M&D%1>:!]y%Rfp;=*,1@?W79&+(~3BD&~\9\'%8MRM143d*,+(*0a#*l(A^&HOsDF%RDFT9%R7!Mu3[Z=1@?.%
MI%'z8A{%R+`\9%m
}+&787'&:c*,Mu1@?.%uD3MR12]278*,D
*>1>*,a%rT8AC1&H11@?.%dM&D%u1>*,DF%W&ga%R78:%>6\R*l%R+21
\'3B+2U
1b&*0+`%R7ZI3B7WMR143B78*0+.-Bf]2793#\9%8M9M9*,+.-Bf&+(*,14%R79&H1>*0+.-j3Ba%R7kO_&7b-%
&D3BA+21@Mc3[Z()&H1b&)m
3BA;=*>O0O&HOM3O_%'&78+&)T93BA.1].3B*,+214%R7!M&HMc%8]^OX*l\R*>13T>o#%'\81u&)()(7R%8M9MI%8M&+(&)TR3BAC1
1@?.%R*075\8O_3MI%7R%8O&H1>*b3B+2MR?*X];=*>1@?6&7879&:sMm j?*>O_%/1@?.%QtvWv MR1b&+()&79(OX*T879&78:
\'3B+21b&*,+2MdO_%8MRM=]278*,D
*>1>*,a%r&+(k-%R+`%R79&HO0OX:TR%81@14%97k&HO14%R78+&H1>*0a%8M9f1@?.%gRB~R'V4rTR%RU
?*0+(&7879&:sM&+(W]y3B*,+214%97!Mc&7R%
3[ZeZ9AC+()&DF%R+21b&HO*,Dr]y3B7!1b&+`\9%m
> 99[¡¢B £¥¤ BcRBs4¦4B§yb©¨[9ªRs[9«s¬=V¨R®§¯8¨¦[~R°
¨±yB²)[~RB~R'VB³^¡¯[9¦[¨[¡¢B £
´)#¦'µ~¨IªkV§¢I«C¬=8¨Ij~!¬¶¡¯[9¦[¨[·!®9¦u4Vr4R¸s²~R~RWB³²~ª±y9¦[
¨I~°F.9¦[³#¦[ª
1, 2, . . . , n
4Bªe#y'¦©¨[¡¢B~§¯¡¯¹=¨I°~°~¡¢~º²)k¨I§¢§[~=²~ª±y9¦[9«B#¦¡¢°~Rs[¡¯³¢»¡¢~º[~e~¦[¡¢ªs²Vª±y9¦4¨IªB~º
[~Rª £ ¡¢ª¡¯§¨¦[§¯»«¬=8¨I¡¯49¦©¨[!®9¦
4V°~°s²~ªr±y'¦[R«[~yN¬='¦[B³{¬=)«)'[ £
>W¦[R¨I§V¨~§¯¡¢8¨[¡¯BV9«I~N¬='®9¦8«B¬==B³¢[RkV¨R®e[~¦[sRR4¼@¨I~°r¡¢W¨¦b[¡¢R²~§¨¦p¡¯[9¦[¨[=N®'¦½
4R¸s²~R~RR
B³e()&H1b& £ ´~#¦'µ)¨IªkV§¢#«s¡¢³^»B²
¬¨Ise[r¡¢°~RH[¡¢³¢»k[~ª!®¡¢[~8¨N[9¦[=¡¢[!¬
4¨N
4~!¬¾»B²)¦°~Rb¡¯¦[R°cªN®¡¢
[B~¡¢ºBH8«»B²hV¨R®4r¡[9¦©¨4N®'¦4VbR¸²~R~RB³{ª!®¡¯[~8¨49¦
¦[9.9¦4[B¡¯¦4R £W¿ ~R4r¦[9y'¦4[B¡¯¦[9uªr²~b±yWl[#¦[R°jbBª9¬~9¦[I«p¨I~°S[~9¦[gªr²~b±yW¨¬¨R»[
¡¢~by994V9ªÀ¡¯h[²)¦[ £ >Á·«V¬=8¨I°~8¨§^¬
¡¯[c4²~[¨Ib¹=±»
²~4¡¢~ºY&7879&:M £
2.6.1 Array types
à g
¨¦4¦©¨R»rB³C§¢9Vº#4
¨ºBº#¦[Rº¨[9 #±ÄR94B³V[~uMN&D%»y ¡¢s[u¨4R¸s²V9V9 £¿ d¨I9RR4
B~·B³`[~¨IºBº#¦[Rº¨4nR°#±ÄR94·¼,[n~h%8O_%RD%9+21@MB½'«.¬=·²~4·¡¯4E*,+(~%/#¦·M9A{T8MI\R78*]^1¼,.B4¡¯[¡¢B½
¡¢<4Vc4R¸s²~R~R £ à §¯§=4V94h§¢9Vº#4)Å 4R¸s²~R~RRk³#¦[ª ¨I5¨¦b¦©¨R»Æ»sy
¬
VBbc®I¨I§¢²~¦©¨I~ºB
R#¦4¦4RbyB~°~E[[~kª¨4V9ª¨[¡¢8¨§p»ny n £ >[~RBªkV²)[9¦RÇ¥ª¨I¡¢jªRª#¦b»«p¨Iƨ¦b¦©¨R»
9R²)¡¯R
¨RBH[¡¢ºB²~B²~=¨¦b8«¬¡¯4
[~R§¢RªRH[=b[#¦[9°4¡¢°~'Å,±»sÅ>4¡¢°~g¼,4Ru´p¡¢ºB²)¦[uȽ £
É^'e²~eb©¨¦4±»kbV!¬¡¯VºE¨Ic¨¦4¦©¨R»k¡¯
¨9[¡¢B2ÊË=79&H143MR1@?.%R+`%RMÌ)qy*b%9a%·¡¢e¨u³_¨Ibeª94Vs°³#¦
RBªkV²)[¡¢~º·¨I§¯§C~¦[¡¢ª
s²~ªr±y'¦[e4ª¨I§¢§¯9¦[V¨I
¨EºB¡¯®Rc²~ª±y9¦ «±¨I4R°cBh'¦[B44¡¢~ºB²)e[~
²~ª±y9¦[[V¨¨¦[~#~¦[¡¯ª £ ,¬=#¦b¹§¯¡¯¹[~¡¢9Êp»B²¬
¦[¡¯4°~!n¬k[~
bR¸²~R~RB³ys²Vª±y9¦4
±y9¬=R9
¨I~°
«s»B²c¨I§¯¬¨R»ºBd[u[~~'µ²~ªr±.9¦~#9¦[B449°
B²)
£ s©¨¦44¡¢~ºd³¢¦[Bª
n−1
»98«)¦['y#2¦4¡¯¨I
~¦[¡¯ª#«)¨I~°h[~Rh9¦[B24B²~
¨I§¢§y¡[eV¦4#y9¦ªW²~§¯[¡§¯R £
É^'8Ç¥V#°)¬=R§¢§~Bk[~
9#¦4¦[R94V94B³C[~¡¢ª9[~s°W±V²)ºBd¦4¡¢ºBs[u4V¡¢ªkV§¢RªRH©¨[¡¯B £
>³»B²5[~¡¢)¹¨±yB²)g¡k³#¦¨Sª¡¢²)[#«[~hª¨IÄ#¦W¸²~Rb[¡¯BJ¡¢g[~¡¢9Êh~N¬Í°~j¬=h9¦4B4B²)
²~ª±y9¦[[Î
`©
!I¤
³#¦d4VW§¢¡¢bR«2¬
~9¦[
¿ ~W³B§¢§¢!¬¡¢~º~¦[Bº#¦©¨Iª ²~4R·¨Ij¨¦4¦©¨R»S»syW®I¨¦[¡¢¨±V§¢
crossed_out
¨IH»Æ®I¨I§¢²~
¡¢B³
»sy
¨I~°<¦49~¦[R4RH[W4VS¼>©V¨I~ºB¡¢~ºH½E¡¢~³#¦[ª¨[¡¢B
crossed_out[i]
bool
¬~94V'¦4Vr²~ª±y9¦ V¨Iu¨I§¯¦48¨I°)»Y±yRR9¦[B449°jB²)d#¦~# £ à ¦4¦[¨8»S¡¢~°~¡¢R9u¨§¯¬¨R»b©¨N¦4
i
³¢¦[Bª
«24
¡¢#¦[°~9¦[c
ºB9[c¡¢~°Vµ
«2¬=r~RR°¨j¨¦4¦[¨8»B³§¢R~º#[
£¿ ~V¦4Bº#¦©¨Iª
0
n−1
n
¦[²~~
`¦©¨4Bb[~R~RRÇ ¡¢9®u³#¦
£
n = 1, 000
# include < iostream >
// Program : eratosthenes.C
// Calculate prime numbers in {2 ,... ,999} using
// Eratosthenes ’ sieve .
int main ()
{
// definition and initialization : provides us with
// Booleans crossed_out [0] ,... , crossed_out [999]
bool crossed_out [1000];
for ( unsigned int i = 0; i < 1000; ++ i)
crossed_out[i ] = false ;
// computation and output
std :: cout < < " Prime numbers in {2 ,... ,999}:\ n";
for ( unsigned int i = 2; i < 1000; ++ i)
if (! crossed_out[i ]) {
// i is prime
std :: cout < < i < < " ";
// cross out all proper multiples of i
for ( unsigned int m = 2* i ; m < 1000; m += i)
crossed_out[ m ] = true ;
}
std :: cout < < "\ n";
return 0;
}
Program 13:
]27939-M%R7'&H143MR1@?.%R+`%8Mm@t
à 5¨¦b¦©¨R»®#¨¦4¡¨±V§¢¼>#¦r4¡¢ªkV§¯»j¨¦4¦©¨R»~
½ c¬¡¯4
R§¯RªRs4·B³dAC+(~%R7!OP:H*,+.n > 0
1>:!]y% ¡¢°~VV9°h[)¦[B²~ºBh[~³B§¢§¢!¬¡¢~º·°~RR§¨N¦©¨[¡¢B £
Definition.
"!$#&%"'
(
9¦4#«)"!#*%
ªr²Vld±yg¨\93B+2MR1b&+21%8]27R%8MRM9*l3B+ B³e¡¢s4Rº#¦©¨I§»yg¬
~B4g®I¨I§¢²~g¡¢
¨IªkV§¢#«2§¢¡[9¦©¨I§¯§¯¡¯¹
1000
«p#¦E¨¦[¡¯[~ª94¡¢·'µ~¦[944¡¢B~E!®9¦·§¢¡[9¦©¨I§¯r¼,§¢¡¯¹
1+1
£ ´)#¦E'µsÅ
½¨¦[WRB~b©¨IH
n
!
' µV¦4R44¡¢B~s[~9¦[¨¦4#[~9¦eRB~b[¨Is'µ~¦[Rb4¡¢B~R«±V²)e¨I§¯§B³y[~Rª ¨R®
4VV¦4#y9¦4»g4¨N
[~R¡¯¦®#¨§¢²~E¡¢¹~N¬
F¨NRBªkV¡¢§¢[¡¯ª £=¿ ~¡¢¨I§¢§¢!¬=[~ERBªkV¡¢§¢'¦4VºB²~¦4EB²)~N¬ªW²~©
ªRª#¦4»g[~d¨¦b¦©¨R»c®I¨¦[¡¢¨±V§¢V9R°~ £
«.±V²)¬=V²)4V¡¯¡¢°~B²)±V§¢·¸²~#[R~9¦[c¼>B~§¯»[cBª¡¯4V9ª
¿ ~»yB³ W¡¢
[n]
§¨49¦½ £h¿ ~k¦[8¨4B¡¯d[V¨ ¡¢·~#E[~k gR¡¨I§¨ª#ÊE¬=8¨I2Ç d¬
¦[¡¯4
«³#¦
int[5] a
'µ)¨IªkV§¢#«[W°~RR§¨¦4d¨Ih¨¦4¦©¨R» [n]B³^»sy
£
¡¢ a n «[~
bint[5]
9B³y¨§¢§~4R¸²~R~R9
¬¡[k¨I§¯§ ±.R¡¢~º
¿ ~®#¨I§¯²V¦©¨I~ºBB³ [n]
(t1 , t2 , . . . , tn)
B³.»y £s¿ ~²~~°~9¦[§¯»¡¢~ºd»y ª¡¢ºBs³#¦eµ~¨IªkV§¢=±y¨IH»k³²~~°V¨IªRs[¨I§)»syE¼>§¯t¡¯¹i
«
«B#¦
½'«B¨I~°¡¢·[~¡¢8¨4#«#[~®I¨I§¢²~RB³)[~ ¨¦4¦[¨8»dR§¢Rª9s[p¦4Rª¨I¡¢E²~~¡¢~¡¯[¡¢¨I§¢int
¡ R9°
bool
n
±»[~u°Vdouble
~¡¯4¡¢B £
¿ ~Y³_¨I'k[V¨k[~Y¨N¦4¦©¨R»J§¢9Vº#45ªW²~bW±y¹~!¬Q¨k9Bªk¡¯§¢c4¡¢ª
9§¢8¨¦[§»<§¢¡¯ª¡¯[·[~
²~4R³²~§¢~R4B³¨¦4¦©¨R»Y®I¨¦[¡¨±V§¢9 £ ´)#¦u'µ~¨IªkV§¢I«[~¡¢§¢¡¢ª¡©¨[¡¢Bc°~R~#¨I§¢§¢!¬6²~[¬
¦[¡[¨
®9¦[b¡¢BB&
³ `¦©¨[Bl[~R~RRÇH4¡¢9®¡¢g¬~¡¢©r[~
²~ª±y9¦ ¡¢¦[8¨I°³¢¦4Bª [~¡¢)²) £ ²~¬=¬
¡¢§¢§
4~#¦4[§»49V!¬ [~¡¢u¦[9b4¦[¡¢'[¡¢B8¨Ij±.kN®'¦[RBª n³#¦E4VW[¡¢ª·±yR¡¢~º)«§¯98Ç¥u4¡¢ªkV§¯»§¢¡®
¬¡[h¡¯ £
2.6.2 Initializing arrays
¿ V°V ~¡¯4¡¢BdB³~¨I¨N¦4¦©¨R»u¬
¡¯[E²~~°~9¦[§¯»¡¢~º
³²~~°V¨IªRs[¨I§B»sy°~9~#¡¢~¡¯[¡¢¨I§¢¡
R{[~®#¨§¢²~R
B³p[~u¨¦4¦©¨R»cR§¢9ªRs[ £ d8¨I¨I44¡¢ºB
®#¨I§¯²V9[r[~dR§¯RªRs4¨³¢[9¦4¬¨¦4°V¼>§¢¡¹¬=°~g¡¯¡¢
`¦[Bº#¦©¨Iª 8" ½'«s±²)e¬=8¨h¨I§¯4·V¦4N®¡¢°~[~®#¨I§¯²V9°~¡¯¦4R9[§¯»«¨Ie¡¢[~³B§¢§¢!¬¡¢~ºE°~R9§¨¦©¨4¡¢B
b©¨N[RªRH £
int a [5] = {4 ,3 ,5 ,2 ,1};
¡¢~Rg4VW²~ª±y9¦EB³=¨N¦4¦©¨R»9§¢RªRH[d8¨j±yk°~R°~²~RR°/³¢¦[Bª
OP*>MR1@«)¬=8¨IY¨I§¯4r¬¦[¡¯[
[~W§¢R~º#[B³[~h*0+y*>1>*l&HOP*H%R7
int a [] = {4 ,3 ,5 ,2 ,1};
¬
¡¯[~B²)¨s»Y¡¢~¡¯4¡¨I§¢¡
R¨[¡¢Bc¡¢¡¢H®#¨§¢¡¢°2«V4VB²~ºB2«.4¡¯V9·¡¯°~R~#
¿ V·°~R9§¨¦©¨4¡¢B
³²~§¢§¯»°~9['¦[ª¡¢~[int
~»a[]
.uB³ £ [¨R»c[V¨ V¨Iu*0+`\93BDW]^O_%814%g1>:N]y%W¡¢h4V¡¯R¨I4 £
a
a
2.6.3 Random access to elements
¿ VdªBbRBªªBh¨I~°²VbR³²~§p¬¨R»B³¨IRR944¡¢~º¨I~°ª°~¡¢³¢»¡¢~ºr[~E9§¢RªRH[
B³¨IS¨¦b¦©¨R»
¢¡ =±»79&+(~3BD &~\9\'%8MRM £ >³"!#*%¡¯B³{¡¢s[9º#¦©¨I§y»yu¨I~°V¨I=®#¨I§¯²V «)[~u§¯®I¨I§¢²~
i
"!$#&%'
¡¢=B³{4V».u²~~°~9¦[§¯»¡¢~º4V¨¦b¦©¨R»
¨I~°
¦4R³9¦[[r4V Å>[
R§¢Rª9s¼>RB²~H[¡¢~º³¢¦[Bª
½B³
a
i
0
£¿ ~²~ª±y9¦ ¡¢e8¨I§¢§¯R°[~*0+(~%F#¦M9A^T!MI\R78*X]^1B³2[~R§¢Rª9s £ >³ ¡¯=4V§¯R~º#[
B³ «
a
[~¡¢~°Vµ ªW²~bi[¨4¡¢4³¢»
¡¯R¨I§¢§¢R°c[~WM'A{n
T!MI\978*]^1u3R].%R79&H143B7 £ a
£¿ ~u#y9¦©¨4#¦
i
0 i<n
[]
¿ ~c4Bª9¬
¨N·b4¦©¨VºB°~RR§¢¨¦©¨[¡¯BƳ#¦4ª¨·B³¨J¨¦4¦[¨8»«`¬
¡¯[ÆVS'µ§¯¡¢R¡¯E»sy
V¨Iª
¨~y8¨N¦[¡¢~º)«¡¢ª#[¡¯®I¨[R°±»[~4²)±V49¦[¡¯~#y9¦©¨N[#¦ £ >~°V9R°2«~4V°~RR§¨N¦©¨[¡¢B
`©
! È
"!$#&%"'
8¨IW±y¦48¨I°¨I !$#&% '~¡¯B³V»sy £ >W[~¡¢4R~4#«s¡¯¡¯¨k¡¢~°~¡¯¦[R9°~V~¡¯[¡¢BrB³ Ç ». £
a
¿ ~kÁ §¨I~ºB²V¨IºB· 9¦4u~c³²V~94¡¢BV¨I§¢¡¯»³#¦d¨IR9R44¡¢~º[~W§¯R~º#[
B³^¨Ih¨N¦4¦©¨R»Y¼>49 R9[¡¢B £ È £ ¤ ±yR§¯N¬³#¦=ª#¦[B[~¡¢©½ £ à 4VV¦4Bº#¦©¨Iªª9¦8«):V3BA
ªW²~bd¦[RªRª±y9¦[~§¢R~º#[»B²)¦[4R§¯³@«¨I~°Q:V3BA¾¨N¦[k¦[Rb.BVb¡¯±V§¢k³#¦ª¨¹¡¢~ºh4²)¦[
[V¨¨ºB¡¯®Rg¨¦4¦©¨R»·¡¯V°~'µ ¡¢~°~RR°r[¨[¡¯ VR
«B¬~9¦[
¡¢[~=§¢R~º#[rB³V4V
¨¦4¦©¨R» £ >~°V¡¯RR[V¨¨¦[·~i#¡¢[~¡¢¦©¨VºBr0¨¦4 ·i8¨I<§¢§¢9n°Q3BAC13[Z
nTR3BAC+( £ ~§¢R4»B²)¦
RBªkV¡¢§¢9¦d 9¦4·byRR¡ °~9±V²~ºBºB¡¢~º³_¨I9¡¢§¢¡¯[¡¯RR«p[~²~[¨IºBB³=B²)bÅ>B³¯Å>±yB²~~°¡¯V°~¡¢9R
¡¢J[~4²)±V49¦4¡¯~#y9¦©¨N[#¦k¡¢
+`31°V'[R9[9°¨W¦[²~s[¡¯ªh¨I~° §¢8¨°Vr[²~~°V ~R°
±yRV¨R®¡¢#¦B³p4V~¦[Bº#¦©¨Iª £
Watch out!
=V¨R®
¨I§¦[8¨I°)»·°~¡¢49²Vb4R°W4Ve['¦[ª6¦©¨I~°~Bª¨IRR94¡¯WRB~~R94¡¢Br¬
¡¯[[~=RBªkV²~49¦8Ç¥
ª¨I¡¢/ªRª#¦b»J¼ R'[¡¢B #£ £ " ½¦©¨I~°~Bª ¨IRR94WªR¨I~4¨NY%Ra%R78:Q¨¦b¦©¨R»/R§¢RªRH8¨IƱy
¨IR9R44R°¡¯[~W4¨Iª²V~¡¢³#¦4ª ¬¨R»«{¨I~°F¬
¡¯[<¼>¨I§¢ªBb½=[~W[¨ªW¨RRR4[¡¢ª#«y~
ª¨4[9¦
¬V¨g¡¯[k¡¯V°~'µ<¡¢ £ ®I¨I§¢²V¨4¡¢~ºF[~'µ~¦[R44¡¯B
¡¢¨Ik³_¨bc¨Ik9®I¨I§¢²V¨4¡¢~º
£
a[0]
a[10000]
>SRBs4¦[¨Ib8«.[~E[~¡¢[¹YV¡¢§¢dB³.R~°V¡¯Vº¡¢H®B¡¢RR9«C±¨I)¹Y4¦©¨I~4³9¦4u¨V°®I¨¦[¡¢B²~#[~9¦¨y'¦[
B»B²)¦
°V9b¹°~sR
~#
4²)~y#¦4¦©¨I~°~Bª ¨IRRRbRÊ[~[¡¢ª[ VV°¾¨I¾¡¯[9ª ¡¢c¦4B²VºB~§¯»
~¦[#y#¦44¡¢BV¨I§C[W¡¯[=°~9~[h¬¡[~¡¢c4VV¡¢§¢ £
>³_¨I98«#¦©¨V°~Bª¨IRRRb`¡¢¨Ir¨¦4¦©¨R»d°V¡¦[R9[§»u¦[9°V²~R9[
¦©¨I~°~Bª6¨RRR4`¡¯4VRBªkV²~49¦8Ç¥
ª¨I¡¢QªRª#¦4»«=4¡¯V9j¨I¨¦4¦©¨R»¨I§¯¬¨R»c9R²)¡¯Rh¨RBH[¡¢ºB²~B²~
b9hB³dªRª#¦4»J9R§¢§¢R«
4R
´p¡¢ºB²)¦[uÈ £
a
{
a[0]
s
Figure 6:
a[1]
a[2]
a[n-1]
}+&787'&:Æ3I\9\RAH]2*b%8M&\93B+21>*i-BAp3BACM]C&7!1u3[Zr1@?.%gDS&*,+<DF%RD3B78:~mdËa%978:Æ%ROi%RDF%R+21
*,+ 1>AC78+ 3#\'\RAs]2*l%8M
D%9D3B78:Æ\9%8O0OM9f
;?.%97R%
*>Mk1@?.%gD%RDF3B78:7R%z8AC*07R%'(143MR143B7R%
&YM9*0+.-Oi%Wa&HOPAp%c3[Zs1@?.%gAC+(~%97!OX:H*,+.-1>:N]y% m s
¿ r¨IRR94e[~9§¢RªRHB³^¡¢~°Vµ ¡¯4V¨N¦4¦©¨R» «)¨E4¡¢ªkV§¢RBªkV²)©¨[¡¢Br¬¡¯4
¨°V°)¦[944R
[~9¦[9³#¦[4² k9R £ >³ ¡¢4V¨I°~°~¦4R4i¼,.B4¡¯[¡¢B½p¬a~9¦4[~~¦[bR§¢Rª9sB³ bb©¨¦44 «¨V°
a
¡¢[~Es²Vª±y9¦B³ªp9ª#¦4»cRR§¢§¢[V¨¨k4¡¢~ºB§¢®#¨§¢²~·B³4V·²~~°~9¦[§¯»¡¢~ºg»y
sRR ²)V¡¢RR«
s
[~R·[~eR§¢9ªRspB³V¡¯V°~'µ b©¨¦44¨[~ªRª#¦b»u9R§¢§¬
VBb=¨I°~°~¦4R4`¡¢
«B4R=´{¡¢ºB²)¦[
£
i
p+si
2.6.4 Arrays are not self-describing
à ¦4¦[¨8»».R
¨N¦[d'µR9~[¡¢BV¨I§y¡¯Á £¿ V³B§¢§¢!¬¡¯Vº·9°~d³¢¦©¨ºBªRs¡¢§¢§¯²Vl4¦©¨[9[~¡¢RÊ
int a [5] = {4 ,3 ,5 ,2 ,1}; // array of type int [5]
int b [5];
b = a;
// error : we cannot assign to an array
a
p+s
p
a[0]
!
p + 2s
a[1]
p + (n − 1)s
a[2]
a[n-1]
0
Figure 7:
1
n−1
2
x?.%c&7879&:%8O_%RD%9+21E3[Zr*0+(~%
i
MR1b&7!1@M&H11@?.%
&)()(7R%RMRM
p + si
m
I¨ ~#[~9¦¨N¦4¦©¨R» £ H»¡¢[~¡¢©Î à ¦4¦[¨8»¨¦[r¨k°~8¨I°
V¨I~°³¢¦[BªÀ[~~¦[Bº#¦©¨ªª¡¢~ºE§¨I~ºB²V¨IºBuÁ«¨I~°h[~u°V94¡¢ºBB³`¨N¦4¦©¨R»¡¢Á¡¢¼>³¢¦[BªÀ[°V¨R».Ç
yB¡¢HB³`®¡¢'¬½¸s²V¡[d~¦[¡¢ª¡¯4¡¯® £¿ ~·ª¨I¡¢¬=R¨¹~R4¡¯[V¨·1@?.%+yACDSTR%R7S3[Zh%8O_%RDF%R+21@MS3[Z
&+¶&7879&:J*,M+`3179%b]27R%8MI%9+214%'(5*0+1@?.%j&7879&:Ì Mas&HOXA{% £ Á¶¬¨I·°~R4¡¢ºB~R°/[RBªky'[g¬¡[
ª¨I©~¡¢~§¨I~ºB²V¨IºB¡¢h kR¡¢9V'»«¨V°
[~¡¢=°V¡¯°V2Ç =§¢8¨R®¦4BªÀ³#¦
§¢²µ²~¦b» £ à ¨¦4¦[¨8»®I¨¦[¡¨N±§¯
¡¢ª9¦[R§»·¦[9~¦[R49s[R°±s»g¡¯4¨I°~°)¦[RbR«°~ V~R°¨I[~
¨°V°)¦[94B³C4VªRª#¦4»·9R§¢§)¬~9¦[[~
~¦[bR§¢9ªRs=¼,4VeB~B³¡¯V°~'µ ½pb©¨¦44 £ ¨I§¢4[¨R»·[V¨¨IW¨¦4¦[¨8»r¡¢`~#MI%8O ZRU©(~%8MI\R78*T8*,+.-.Ê
¡¯°~R~# l¹~N¬ ¡¯[=!¬§¯R~0º#[ £
!¬w¬=
ºB9[ [~
¨I44¡¢ºB~ªRH·¡¢4b²VIÊ4V'¦[
¡¯r~¬¨R»B³¨I²)[Bª¨4¡¢8¨I§¢§»F9#»¡¯VºF¨I§¢§
R§¢9ªRs[B³`[~¨¦4¦©¨R»
¡¢H[ «C¬¡[~B²~¹~!¬¡¢~º~!¬6ª¨IH»hR§¯RªRs4[~R4¨N¦[ £ ²)¬=
a
\'&+<B³RB²)¦[4°~W[~¡¢ª¨Is²¨§¢b§¯»r®¡¨¨4¡¢ªkV§¢§¢s#{«4¡¢~R¬=¹V!¬ [~d¨N¦4¦©¨R»c§¢R~º#[~=³¢¦[Bª
[~°~RR§¨¦[¨[¡¢B~ 28¨¦4§¯»Á V¦4Bº#¦©¨Iªª9¦[¬=9¦[r~#»'db.B¡¢§¢R°SR~B²~ºBF[cRBªkV§¨I¡¢¨N±yB²)
4²~©Yª¡¢~#¦=¡¢~RBs®9V¡¯R~RR £ ¼ h[~u#4V'¦
V¨I~°2«[~¡¢§¢8¨R®R¨IªkV§¢¦[Bª ³#¦±²~ºB £ ½
V9hÁÂÂL¬¨I°~9®R§¢#.R°ªW²~©k§¨N[9¦8«HB~
°~R4¡¢ºBgºB¨I§V¬¨[d¨R®Á ¨¨ub²~±V4' £ Ã
¨RB~4R¸²~R~RI«C¨¦b¦©¨R»¨¦[dl[¡¢§¢§2¨¦4B²V~°
¡¢YÁÂu £
r¨I§¯48¨I~~#¡¢~¡¯[¡¨§¢¡
Ru¨IF¨¦4¦©¨R»³¢¦[Bª
2.6.5 Iteration over a container
É298Ç¥[¨¹¨db['h±¨I[¹.«³#¦4ºB9¨±yB²)[~[9~~¡¢8¨§¢¡¯[¡¢9B³^¨¦4¦[¨8»=³#¦¨dªBªRsR«¨I~°ºB³#¦
¨·±¡¯ºBºB9¦=¡¯9[²)¦[ £
YV¨R®S¨I§¯¦[8¨°~»<¡¢~°~¡¢8¨[9°5¡¢5[~¡¢sb¦[°~²~9[¡¢BJ4j[~¡¢k4R'[¡¢B [V¨g[~~¦[sRR4B³
¡¯['¦©¨[¡¢~º!®9¦E¨4R¸s²~R~RkB³°V¨[¨¡¯u²)±V¡¢¸²~¡¯4B²V £·¿ »V¡¢R¨I§¢§¯»«.[~r°V¨©¨¨¦[rb[#¦[9°j¡¢bBª
\93B+21b&*0+`%R7!«V¨I~°c¬=~R9°
[Ey'¦[³#¦[ªÀ¨ER9¦4[¨I¡¢#y9¦©¨N[¡¢B³#¦¨I§¢§R§¢RªRH[e¡¢[~RBH©¨I¡¢~9¦ £
>ºBR~9¦[¨I§>«~¨·RBs[¨I¡¢~9¦¡¢¨I#±VÄl99=[V¨8¨Ib4#¦[u#4V'¦
#±VÄR9[¼>¡¯[=R§¯RªRs4©½'«)¨I~°h4¨N
'¦[
4Bª¬¨R»B³¨IRRRb4¡¢~ºg[~R4uR§¢Rª9s[ £¿ ~uBV§» bV¨¦4° ¦[R¸s²V¡¦[RªRH
~9¦[u¡¢4¨N
¨kRBH©¨I¡¢~9¦ªr²~b 9¦[~dyB4b¡¯±V¡¢§¢¡¯»cB³¡[9¦©¨4¡¢~ºg!®9¦u¨I§¢§p¡[R §¢9ªRs[ £ >S4V¡¯¡¢~³#¦[ª¨I§
4R~4I«C¨I¨¦4¦©¨R»
¡¢¡¯V°~R9°Y¨r9Bs©¨I¡¯V'¦8«)4¡¢~R[~¦©¨V°~BªÀ¨IR9R4³²~~9[¡¢BV¨I§¯¡¯»8¨Ih±.d²~4R°
[W¡¯[9¦©¨N[N®9¦[~u9§¢RªRH[ £
`©
!
É 9RÇ¥ºB9
±C¨©¹
[¨¦4¦[¨8» £ ,49¦©¨[¡¯VºWN®'¦¨IS¨¦4¦©¨R»
B³§¯R~º#[
^
8¨Ic±y°VB~±»¦©¨V°~BªÀ¨IR9R4§¢¡¯¹¡¢c§¢¡¢~R !C8" B³ `¦[Bº#¦©¨Iª 8"£ V¨8®4R9h[V¨=[~n
¦©¨I~°~BªÍ¨IRRRb³²V~94¡¢BV¨I§¢¡¯»B³¨¦4¦[¨8»¡¢¡¢s['¦[V¨I§¢§¯»±¨I49°SB¨°V°)¦[94¨¦[¡[~ª9[¡¢ £ ²~¦4¡¢~º
[~·¡¯['¦©¨[¡¢B2«)[~·³B§¢§¢!¬¡¯VºW4R¸s²V9V9rB³¨I°~°)¦[Rb4R¡¢RBªkV²)[R°2Ê
p, p + s, p + 2s, . . . , p +
«¬~9¦[
¨V°
V¨R®u[~²Vb²¨§^ªR¨I~¡¢~ºB £
(n − 1)s
p
s
¿ ~¡¢E¦4R¸²~¡¯¦[9·BVªr²~§¯[¡¯V§¢¡¯8¨[¡¢BS¨I~°/B~¨I°~°~¡¯[¡¢B³#¦r¨IH»/¨I°~°)¦[R4·µ)R9~[~ ~¦[b £
²)·¡¢³e»B²/[~¡¢)¹¨±yB²)d¡¯8«[~kªr²~§¯[¡¯V§¢¡¢R¨[¡¢BB~§¯»j9BªRE¡¢±yRR¨I²~4k¬=RBªkV²)[k8¨I©
¨I°~°)¦[R4r³¢¦[Bª 49¦[¨[©2«¡¢~°~9yR~°~RH[§¯»³¢¦[Bª [~~¦[9®¡¯B²VB~R £ >³_¨I98«[~c[¨Iª49WB³
¨I°~°)¦[R4bReRB²~§¢°ª#¦[ k9¡¢Rs4§¯»k¨V°ª#¦4
V¨[²)¦©¨I§¯§¯»·±yRBªkV²)[R°W±»kl©¨¦4[¡¯Vº¬¡¯4
¨I~°
p
¦[9.8¨[R°~§¯»c¨°V°~¡¢~º
¼ bºBB¡¢~º·[r[~u~'µ
R§¯RªRs ½ £
s
4¡¢~ºd¦[¨I~°VBª ¨IRR94R«¬=8¨SM'*,DhACO_&H14%d¨¦4¦[¨8»g¡¯[9¦[¨[¡¢B2«B±V²~¬=¨¦[ª¡¯44¡¢~º[~#y9¦©¨!Å
[¡¢BB³ bºBB¡¯Vºu[E[~~'µR§¢RªRH HBV§»W[~¡¢#y9¦©¨4¡¢Bkª¨¹R¡¯[9¦[¨[¡¢Bk!®9¦¨d9Bs©¨I¡¯V'¦
V¨[²)¦©¨I§V¨I~°k kR¡¢9s £¿ V³B§¢§¢!¬¡¯V º¨IV¨I§¯Bº#»¡¢§¢§¢²~b4¦[¨[R[~yB¡¢sRÊ{»B²j\'&+jB³.RB²)¦[4¦[8¨I°
¨r±.#¹±»
b©¨¦b[¡¢~ºr¬
¡¯[cC¨ºB «)[~RYR§¯B4¡¢~ºW[~±y#¹C«~#yR~¡¢~ºg¡¯
¨Iº¨I¡¯hBh¨IºBR
«
1
2−3
R§¢Bb¡¢~ºY¡¯8«#yR~¡¢~ºY¡¯B/¨IºBR
«9[ £ ²)²V~§¢94·»B²^Ç ¦[4Bª9¬
V¨·RR9Rs4¦4¡¢#«»B²
4−5
~¦[#±¨±V§¯»~¦[R³9¦[uIJ~b[²)¦[h[~¨IºBR¡¢
±y'¬=9R £
Iteration by random access.
à ¦b¦©¨R»2 9¦{V¨[²)¦©¨I§#¨I~°d gR¡¢RH{¡[9¦©¨4¡¢B[)¦[B²~ºB]y3B*0+214%R7!M £ {B¡¢s['¦
®I¨I§¢²~R
R¨I±yd[~B²~ºBsB³¨I
¨I9[²V¨I§{¨I°~°)¦[R449R«.¨I~°[~9»h¨I§¢§¯N¬ #y'¦©¨[¡¢B~§¢¡¯¹ 4¨I°~°~¡¢~º
¡¢c#¦[°~9¦[WºB[[~VµR§¢Rª9s=¡¢c[~u¨N¦4¦©¨R» £ (
9¦[¡¢=~N¬¾¬=RB²~§¢°cR¸²~¡¯®I¨I§¢9s[§¯»g¬
¦[¡¯s4
[~¡¯[9¦©¨N[¡¢Bc¡¢h§¢¡¯V9 !C8" B³ `¦[Bº#¦©¨Iª 8" ¬¡¯[cyB¡¢H[9¦[ £
Iteration by pointers.
bool * begin = crossed_out;
// pointer to first element
bool * end = crossed_out + 1000; // past - the - end pointer
// in the loop , pointer p successively points to all elements
for ( bool * p = begin ; p != end ; ++ p)
* p = false ; // * p is the element pointed to by p
à °~ª¡¯4[9°V§»«!4V¡¯p§¢s#¹pª#¦4RBªkV§¢¡¯8¨[R°d¨ ~¦[l`4¡¢ºBHp[V¨IE[~¦[¨I~°VBª ¨IR9R4®9¦[b¡¢B2«
±V²)e¬=#Ç¥§¢§'µV§¨¡¢k¬V¨8Ç ºBB¡¢~ºEBc¡¢°~9©¨I¡¢§¡¢[~~'µ=499[¡¢B~ £ >[9¦[ªB³^´p¡¯ºB²~¦4 «¬=
V¨R®u¦[9V§¨RR°h¡[9¦©¨4¡¢Bc±s»h¡¯V°~'µ¬
¡¯[
¡¯[9¦©¨N[¡¢B±»
¨I°~°)¦[R4 £
2.6.6 Pointer types and functionality
´)#¦¨s»»y [~R#¦4¦[9byB~°~¡¢~º]y3B*0+214%R71>:!]y%W¡¢
·R¨I§¢§ ½£
[~·²V~°~9¦[§»¡¢~ºg».EB³ 8£ à Sµ~¦[R4b¡¢BFB³»sy ¡¢8¨I§¯§¢R°¨r]y3B*0+214%R7j¼0[
¿ ~r®#¨I§¯²VrB³e¨yB¡¢H[9¦[ ¡¢[~g¨I°~°)¦[RbdB³e¨I#±ÄR9uB³»sy £ gR¨I§¢§[~¡¢[~
#±VÄl99].3B*,+214%'(Y143k±»c[~.B¡¢s['¦ £
r8¨I®¡¢4²V¨I§¢¡ R¨kyB¡¢s49¦ #¨u¨j¨¦4¦4N¬¶yB¡¯s[¡¢~ºk[
¨RR§¢§`¡¢S[~W9Bªk²)['¦8Ç¥ª¨I¡¯
ªRª#¦4» Q[~RR§¯§2¬
~9¦[u4V#±VÄl99=yB¡¢s4R°
[r±
» #Æl©¨¦4[9«)4RE´{¡¢ºB²)¦[ £
!
#
Figure 8:
} ]y3B*0+214%R7Y143 7R%b]27R%8M%R+21@M1@?.%&)()(7R%8MRMY3[ZY&+ 3T,o#%9\R1g3[Z1>:N].% ]2A.14%R7.Ì MrDS&*,+<DF%RD3B78:~m
*0+¾1@?.%S\93BDU
¨V°
> ~¡¯[¡¨I§¯¡
8¨[¡¯B^«y[~c¨I4b¡¢ºB~ªRsd#y9¦©¨4#¦ «¨V°/[~RBªk¨¦[¡¢bB#y9¦©¨4#¦[
=
==
¨¦[°~V~R°<³#¦W¨IH»yB¡¢H[9¦E». 8£j¿ ~§¨4['¦4¡¢ªkV§¯»S[Rb¬~94V'¦·[~
¨°V°)¦[944Rr!=
¡¢
¸²~Rl[¡¢BY¨¦4[~[¨Iª#¦V# £
>~¡¯[¡¨I§¯
¡ 8¨[¡¯B
¨V°S¨Ib4¡¢ºB~ªRsR#s»[~d®I¨I§¢²~k¼@¨I
²Vb²¨§_½'«~¬~¡¢©Y¡¢[~¡¢R¨I4·ª8¨I~=[
R#s»j¨Ij¨I°~°~¦4R4 [s²~R«p¡¢³ yB¡¢H[[h4Bª#±VÄR98«^[~g¨Ib4¡¢ºB~ªRs
V¨I[~W R9
[V¨
V!¬ ¨I§¢bcyB¡¯s[[j[~¡¢#±VÄl99 £·¿ ~r#±VÄR9¡¯[bR§¢³¡¢V#R#V¡¢i9° =£ j ¦[Rª¨¦4¹h[V¨
yB¡¢H[i9¦u¡¢~¡¯[¡¨§¢
¡ 8¨4¡¢B¨I~°¨I4b¡¢ºB~ªRs¦[R¸s²~¡¯¦[W4VW»syRuB³±y#[j#y'¦©¨I~°~u[c±yg'µ)¨I9[§»
[~d4¨Iª ¡¢ªkV§¢¡¢9¡¯9Bs®9¦[b¡¢B~
°~B2Ç ¬=#¦4¹ £ >³»B²4V¡¯~¹
¨±.B²~¡¯R«~4V¡¯¡¢R§¢8¨N¦ £ >ª¨IºB¡¢~
[V¨=[~®#¨¦4¡¨±V§¢ ¡¢B³{».
«¨V°
[V¨=»B²YRB²~§¢°
¬¦[¡¯[
i
int*
double * j = i
¡¢~R
#±VÄl99[²Vb²¨§¢§¯»¦[R¸s²~¡¯¦[dª#¦4ª9ª#¦4»RR§¯§¢4¨
#±ÄR'[R« ¬=B²~§¢°~!¬
±y
¨ydouble
B¡¯s[9¦[·¨
#±VÄR9[V¨¡¯V9§¢²~°V9ªRª#¦b»·RR§¢§¯#¦[¡¢ºBint
¡¯¨§¢§¯»E~#±yRj§¢B~ºB¡¢~º[ £
double
i
¿ V¡¯8¨IV¨¦[°~§¯»c±yE8¨§¢§¢R°¨ b9Bs®9¦[b¡¢B £ >S³_¨I98«4¡¢~RE¬=EB~§¯»
R#»Y¨IS¨I°~°~¦4R4R«C4V'¦[
8¨I~~#=±y¨Is»VH»4¡¢R¨I§2RBs®9¦44¡¢BhB³^[~
b[#¦[R°
®#¨I§¯²VI«)9®R¡¢³2[~ªRª#¦4»W¦[R¸²~¡¯¦4RªRs4
B³{4V¬=r».R
V¨~yRc[W±.[~u[¨Iª £
8¨Ig#±~©¨¡¢g¨yB¡¢H[9¦`[u¨IH»WºB¡®Rg#±VÄR9±»W¨~V§¯»¡¯Vº[~=²~V¨¦4»
& ()(7R%8M9Mc3R]y%979&H143B7[k¨s»c§¯®I¨I§¢²~[V¨=¦[R³9¦[[W[~#±ÄR' £ >³p[~u§®#¨I§¯²V¡¢=B³p»sy «)[~R
)
T
[~¦[R4²~§¯¡¢¨I
¦4®I¨I§¢²~B³p»y
£¿ ~ub»s©¨!µhB³¨I¨I°~°)¦[Rb
#y9¦[¨[#¦8¨I§¢§2¡¢
The address operator.
T*
>[~d³B§¯§¢N¬
¡¢~ºW9°~d³¢¦©¨ºBªRs¬=d²~4d[~d¨I°~°~¦4R4#y'¦©¨[#¦[k¡¢~¡¯4¡¨I§¢¡
9¨r®I¨¦[¡¨±V§¢
iptr
B³{»sy
¬¡[
[~u¨I°~°)¦[R4B³`¨I#±VÄR9B³p».
V¨IªR° £
int*
int
i
int i = 5;
int * iptr = & i ; // iptr initialized with the address of i
´ ¦4Bª ¨/yB¡¢s49¦8«¬=R¨ILºB9h±¨I[¹Q[<[~F#±ÄR9
yB¡¢H[R°4
)
[)¦[B²~ºB(~%R7R%,ZI%R7R%9+`\R*,+.-c#¦*0+(*,7R%'\81>*b3B+ £¿ V²~¨N¦4»F(~%R79%>ZI%R79%R+`\9%3R]y%R7'&H143B7
¨~V§¢¡¢9°g[·¨I
¦4®I¨I§¢²~B³^.B¡¢s['¦e»sy»¡¢9§¢°~=¨I
§®#¨I§¯²V¦4R³9¦4¦[¡¯Vº[[~#±ÄR'.B¡¢s[9°c[ £ *>³2[~¦4®#¨§¢²~¡¢
B³{»sy «[~Rh[~¦[R4²~§¯¡¢B³{». £¿ ~ul»s[¨Nµ
B³`¨r°~9¦4R³9¦[R~Rd#y9¦©¨4#¦R¨I§¢§2¡¢
The dereference operator.
`©
8"
% ´)B§¢§¢!¬¡¢~º·²)YBB²)¦~¦[9®¡¯B²VRs°V³¢¦©¨IºBª9s8«¬=8¨Ih4V'¦[R³#¦[¬
¦[¡¯4
int i = 5;
int * iptr = & i ; // iptr initialized with the address of i
int j = * iptr ; // j == 5
¿ ~V¨Iª¡¢~ºgb~Rª·B³`yB¡¯s[9¦
»syR¡¢ª#4¡¯®#¨N[R°±»h[~·°V'¦[R³9¦[9V9W#y'¦©¨[#¦ £¿ ~
°~RR§¨N¦©¨[¡¢B
#
8¨I¨I§¢4±yu¦48¨I°j¼@¨V°
¡¢h³_¨9§¢9º¨I§¢§¯»k±.¬¦[¡¯4[9 s¬=u°~B2Ç °~r[~¡¢9«~4VB²~ºB½e¨I
#
¿ Vu4RRB~°Y®9¦[b¡¢BY¡¢~°~¡¯¦[R94§¯»°~ VV9[~u»sydB³ ±s»h4¨8»¡¢~ºW[V¨ #¡¯
B³p». £C¿ ~¡¢
¡¢=[~u4¨Iª¹¡¢~°hB³p¡¢~°V¡¦[R9°~V~¡¯[¡¢B[V¨¬=d¨§¯¦[8p¨I°)»¹V!¬ ³¢¦[BªÍ¨¦4¦©¨R»c°~RR§¨¦[¨[¡¢B~ £
´p¡¢ºB²)¦[ ¡¢§¯§¢²~b4¦©¨4R=¨I°~°)¦[R4
¨I~°h°~9¦[R³'¦[R~R·#y9¦[¨[#¦ £
.B¡¢s['¦u¼,ºB¡¯®RY¨I=¦4®I¨I§¢²~!½
#±VÄR9u¼>ºB¡¯®RY¨§¯®I¨I§¢²~!½
Figure 9:
x?.%d&)()(7R%8M9Mu3R]y%R7'&H143B7bOi%>Z91g&+(*,1@M*,+ya%R7!MI%Rf1@?.%d(~%97R%>ZI%97R%R+`\9%r3R]y%R7'&H143B7b78*0-?)1
´ #¦¨Is»FyB¡¢H[9¦d»syk[~9¦[k¡¯·¨
®I¨I§¢²~k°~¡¢b[¡¯VºB²~¡¢b¨N±§¯r³¢¦4Bª ¨Is»#[~9¦
)
yB¡¢H[9¦®I¨I§¢²~ £¿ V¡¯®I¨I§¢²~¡¢8¨I§¢§¢9°S[~+yA.O0O{]y3B*,+214%97a&HOPAp% £r¿ Vr¡¢H[RºB9¦®I¨I§¢²~
8¨±y
RBH®9¦4[R°F[c¨Is»YyB¡¯s[9¦
»sy £d¿ ~·®#¨§¢²~¨I³¢[9¦RBH®9¦[4¡¢BF¡¢[~²~§¢§p.B¡¢s['¦®#0¨I§¯²V £ >
[~E°~RR§¢¨¦©¨[¡¯B
«C³#¦'µ)¨IªkV§¢#«)[~d®I¨¦[¡¨N±§¯
ºB9[¡¢~¡¯4¡¨I§¢
¡ 9R°c¬
¡¯[h4V
int* iptr = 0
iptr
²~§¢§yB¡¢s49¦®I¨I§¢²~ ¡¢¨g+yA.O,O~]y3B*,+214%97 £¿ ~s²~§¢§yB¡¯s[9¦®#¨I§¯²Vªr²~b
£ ¨I§¯4·[¨R»[V¨
~#±.u°~9¦[9³9¦[R~RR°2«4¡¢~R¡¯°VsRV#iptr
R#¦4¦4RbyB~°h[g¨Is»c'µ¡¢b[¡¯VºW¨I°~°)¦[R4 £
4¡¢~ºd4V
²~§¢§.B¡¢s['¦®I¨I§¢²~
¡¢[~[¨I³¬¨R»kB³y¡¯V°~¡¢R¨[¡¢~º[V¨[~9¦4¡¢~·#±VÄl99¼,»'½
[kyB¡¯s
4 £
¿ ~¨I§¯[9¦4¨N[¡¯®B³§¯8¨R®¡¢~ºW4VuyB¡¢s49¦²~~¡¢~¡¯[¡¨I§¯
¡ RR°c¡¢±¨I°2Êe[~9¦[d¡¢~k¬¨R»
B³`[Rb4¡¢~ºg¬~9[~9¦¨WyB¡¢H[9¦
4¨N¡¢~#¨gs²~§¢§{yB¡¯s[9¦
~B§¢°~[~¨I°~°)¦[R4
B³¨W§¢RºB¡¯[¡¯ª¨[
The null pointer.
8")
#±VÄl998«#¦E¬
~9[~9¦E¡E~B§¢°~d4Bª l¦©¨I~°~Bª
¨I°~°)¦[Rbd¦[R4²~§¯4¡¢~º³¢¦[Bª §¢R¨8®¡¢~º
[~g.B¡¢s['¦
²~~¡¢~¡¯[¡¨I§¯
¡ RR° £
>[~g§¢¨4[9¦8¨4#«^°V'¦[R³9¦[9V9¡¢~ºh[~r.B¡¢s['¦d²~4²V¨I§¢§»Y9¦©¨IbV9u[~W~¦[Bº#¦[¨Iª £ Á=B~4¡¯°V'¦
[~¡¢=Rs°VIÊ
int * iptr ;
// uninitialized pointer
int j = * iptr ; // trouble !
à ³¢['¦¡¯[°~RR§¢¨¦©¨[¡¯B^«#4VyB¡¢H[9¦
¨²~~°V ~R°W®#¨I§¯²VI«H¬
V¡¯W¡¢g~¦©¨I'[¡¢Rª8¨I~`[V¨
¯¡ ª¨R»
R#¦4¦[9byB~°S4¨IS¨¦4±V¡¯4¦©¨N¦4iptr
»¨°V°)¦[94¡¢ªRª#¦4» °~9¦[9³9¦[R~R¡¢~ºc¡¯ªR¨I~
[¨IR9R4
[~ªRª#¦4»gRBs[9s
¨=[~¡¢¨I°~°~¦4R4 £ >hºBR~9¦[¨I§>«[~¡¢=¨I°~°)¦[Rb¬
¡¢§¢§.~#=±yR§¢B~º·[[~¨¦b
B³^ªRª#¦4»r[·¬~¡¢©c4V~¦[Bº#¦[¨IªwV¨I=¨IRR94 )[~#y9¦©¨4¡¢~º·b»b4Rªw¬¡¢§¢§~[~R
°V9s»c¨IR9R4
[W¡¯¨I~°h[9¦[ª¡¯¨N[
[~V¦4Bº#¦©¨Iª ¬¡¯[
¨MI%l-BDF%R+21b&H1>*b3B+YZN&A.OX1 £
2.6.7 Array-to-pointer conversion
à H»S¨¦4¦©¨R»SB³». 8¨I¡¯ªk§¯¡¢R¡¯[§»c±.r9Bs®9¦44R°j[»sy 8£¿ ~r¦4R4²~§¯[¡¢~º®I¨I§¢²~¡¢
[n]
[ ~u¨I°~°~¦4R4
B³^[~ ~¦[l
R¯§ RªRsB³^[~E¨¦4¦[¨8» £ ´)#¦'µ~¨IªkV§¢I«¬=uR¨I¬
¦[¡[
int a [5];
int * begin = a ; // begin points to a [0]
¿ ~u°V9R§¨¦©¨N[¡¢B
int * begin = & a [0]; // address of the first element
¡¢·R¸s²~¡¯®#¨§¢Rs·¨I·³_¨¦W¨IE[~k¦[Rb²V§[¡¢~º®#¨§¢²~B³
¡¯ERB~R9¦[~R°2«±V²~·4V'¦[¡¢¨4²)±~[§¢
begin
°~¡ '¦[R~R#Ê[~u§¢¨4[9¦°~RR§¢¨¦©¨[¡¯B
9®I¨I§¢²V¨4R
«)¬~¡¢§¢[~³#¦[ª9¦°~R~# £
a[0]
¿ ~
.B¡¢s['¦bÅ@b»§¢¦49V§¨IRRª9sR°~³#¦[~§¢#k¡¢k§¢¡¢~R !C! B³ `¦[Bº#¦©¨Iª 8" [V¨¬=
V¨R®g~¦[R4RH[R°Æ¨u[~gR~°/B³ R9[¡¯B £ È £ ª¨¹Ru²VbgB³=¨¦4¦[¨8»HÅ>[IÅ,yB¡¢H[9¦uRBs®9¦44¡¢B/¡¢
[~ V¦4b
§¯¡¢~#Ê
bool * begin = crossed_out;
// pointer to first element
¿ ~g¨¦4¦©¨R»sÅ,[IÅ>.B¡¢s['¦u9Bs®9¦[b¡¢B¡¢²)¦[9§¯»SRB~R9~[²V¨I§ {B[~gª¨I©~¡¢~·4¡¢°~#«{~#[~¡¢~º
¨~yR~ £ ´)#¦u[~¡¢9«^¬=¦[R8¨§¢§³¢¦[Bª B²)¦u8¨¦[§¯¡¢9¦°~¡¢4R²~44¡¯Bj¡¢ 99[¡¢B £ È £¥¤ [V¨u¡¢Á6¨I~°
V
[~9¦[9³#¦[E¨I§¯4W¡¯Á·«¨Y¨¦4¦©¨R» b¡¢ 4¡¢ªkV§¯»W[~d¨I°~°)¦[Rb
B³p¡[ ~¦[l
R§¯RªRs £
à ¦4¦©¨R»HÅ>[IÅ,yB¡¢s49¦d9Bs®9¦[b¡¢B¨I²)[Bª¨4¡¢8¨I§¢§»
©¨N¹RuV§¨I9r¬
V9/¨I¨¦4¦[¨8»F¨~yR¨¦[d¡¯j¨I
'µV¦4R44¡¢B £ Äl¨¦4Vh s4¦[B²~bb¦[²){«[~°~R4¡¢ºB~9¦rB³rÁÂu·«¡¢§¯§¢²~b4¦©¨4Rd[~¡¢·±»/4¨8»¡¢~ºS4¨N
1@?.%Æ+&D%Q3[Z<&+Í&7879&:\93B+ya%R7!1@M143 &Æ]y3B*,+214%97J143*,1@
M e7!MR1S%ROi%RDF%R+21F&H1
1@?.%<MROP*0-B?)14%8MR1
]27R3Ba3I\'&H1>*b3B+ £ >hb4¡¢§¢§C#4V'¦¬=#¦4°V9«[~9¦[u¨¦[~r#y9¦©¨4¡¢B~B¨¦b¦©¨R»RÊ9®9¦b»[~¡¢~º[V¨e¬=
RB~R9~[²V¨I§¯§¯»g°~d¬
¡¯[¨Ic¨¦b¦©¨R»k¡¢¡¯k¦[8¨I§¢¡»W°~B~
¬¡¯4¨uyB¡¢H[9¦ H[~¡¢¡¯¨¦b[¡¢R²~§¨¦¨~V§¢¡¢9
[[~·¦©¨I~°~Bª ¨RRR4u#y9¦©¨N[¡¢B2«.4R[~C¨N¦©¨Iº#¦©¨VS8¨I§¢§¯R° {B¡¢s['¦ub²~±V4'¦[¡¯~[¡¢~º)«y#¦[~
4¦[²)[¨±yB²)=¦©¨I~°~BªÍ¨RRR4 ¡¢
4V~'µ
4R94¡¢B £
!"#$%"&'$()*+,((-./("01"2$%341/(5637,1""8 9:;<>=7$"
5;"?@7A()8 8B(7+((-DCE1CFG H;)(?1JIB("A1%@K2+L(()1(M9:"")+8B2")-;8>$N2((-J"?+PO ?GQ""A8D5*<
`©
8"
2.6.8 Pointer arithmetic
>#¦[°~9¦[W²V~°~9¦[l©¨I~°h¬H»[~uRs°~u³¢¦©¨ºBªRs
bool * begin = crossed_out;
// pointer to first element
bool * end = crossed_out + 1000; // past - the - end pointer
// in the loop , pointer p successively points to all elements
for ( bool * p = begin ; p != end ; ++ p)
* p = false ; // * p is the element pointed to by p
¡¢~°~RR°r49[¨§¢§R§¯RªRs4B³V4V=¨N¦4¦©¨R»
[ !«#¬=eV¨R®e[²V~°~9¦[l©¨I~°E]y3B*,+214%R7
crossed_out
&78*>1@?DF%81>*b\R«[~¨¦4WB³RBªkV²)[¡¢~ºY¬¡¯4J¨I°~°)¦[R4bR £
°V9§¢¡¯±y9¦[¨[R§¯»/R¨I§¢§e[~¡¢k¨ 4¨¦4 «
4¡¢~RyB¡¢H[9¦u¨¦[¡[~ª9[¡¢E9BªR¬¡¯[¨c§¯#B³V¡¯[³_¨I§¢§¯R«.±V²~¬
¡¯[~B²)¨c[¨³9»~9 £ [~
#[~9¦WV¨I~°^«[~
¨I²)[~#¦[³RR§=[V¨[~9¦[h¡¯W¨§¢4F¨SR'¦4©¨I¡¢Æ±y8¨I²)»/¡¢Æ[~
ª¡¢~¡¢ª¨§¢¡¢4ª B³
yB¡¢H[9¦¨N¦[¡¯[~ª9[¡¯ £ ,RÇ¥E§¢¡¹k°)¦[¡¯®¡¯Vº¨IB§¯°~4¡¢ª9¦8ÊE¡8Ç¥E§¯B²V°2«`¡¯RÇ¥d°~¡ gR²~§¯E[Yl[R9¦8«48¨N[
¨¦[u²~V9Bª³#¦4©¨±V§¢#«¨I~°h[~9¦[#Ç
~g~8¨N[¡¢~º £ ²)[~d~R[¹h¬
¡¯[
¡¯ ¿ ~dB§¯°~4¡¢ª9¦e§¢s#¹4
ªr²V©±y'4[9¦4¨F¨Wª°~9¦[R¨¦ £ 9®9¦4[~R§¯R4R«y¨³¢[9¦°)¦[¡¯®¡¢~ºW[~EB§¢°)[¡¯ª9¦³#¦¨r¬~¡¢§¯#«¡
¬¡¯§¢§~¦[#±¨±V§¯»[²)¦[B²)[V¨±y8¨I²)»W¡¢~#9VB²~ºB2«s¨I~°k[V¨4¨I³9»¨I~°²~[¨±V¡¢§¯¡¯»r¨¦[
ª#¦4
¡¢ªky#¦b©¨Is³_¨I9[#¦[¡¢h4V§¢B~º¦[²~ £
¿ ~±¡¯¨N¦4»¨I°~°~¡¯[¡¢B#.9¦©¨[#¦4
«
¨N¦[°V
~R°d³#¦{§¯R³¢^#y9¦©¨I~°~
Adding integers to pointers.
B³¨Is»yB¡¢s49¦d». ¨V°¦[¡¯ºBsE#.9¦©¨I~°~·B³¨Is»¡¢s[9º#+¦©¨I§
»sy £ R8¨I§¢§[V¨E¡¢³¨Iƨ¦lÅ
¦©¨R»Æ¡¢V¦4N®¡¢°~R°J¨Ir[~
§¯R³¢r#y9¦©¨I~°2«¡r¬
¡¢§¢§¡¯ªk§¯¡¢R¡¯[§»S±.
RBH®9¦4[9°J[j¨YyB¡¢H[9¦r²~4¡¢~º
¨¦4¦[¨8»HÅ>[IÅ,yB¡¢H[9¦RBs®'¦[4¡¢B £
´)#¦4V·±y9¨R®¡¢#¦B³ [±y°~ VV9°^«.4V'¦[Wªr²~b±yr¨I¨¦4¦©¨R»B³4Bª·§¢R~º#[
«y4²~©
+
n
[V¨[~d§¢9³¢#y9¦[¨I~° # %¡¢¨yB¡¢s49¦4g[~dR§¯RªRsB³4Bªu¡¢~°~'µ
«¡¢h[~
k, 0 k n
¨¦4¦[¨8» £¿ ~8¨I4
¡¢e¨I§¢§¯N¬=R°¨V°cR#¦4¦4RbyB~°~[E[~4¡¯4²¨N[¡¢Bk¬~9¦4 # %d¡¢¨dyB¡¢s49¦
B~g¨Ibu[~k§¨Ibku=
R§¢9nªRsdB³[~¨¦4¦[¨8»<¼,¬=gR¨I§¢§[~¡¢E¨].&HMR1@Ub1@?.%RU'%R+(S]y3B*,+214%97 ~#[g4¨N
4²~©¨.B¡¢s['¦ªr²~b~#±.d°~9¦[R³'¦[R~RR°½ £
>³p[~4RRB~°Y#y9¦[¨I~° "!#*%V¨I4Bª®#¨§¢²~ b²V©h4¨N
«)[~R
#
%Â !$#&%
i
0 k+i n
¢¡ ¨hyB¡¯s[9¦d[[~
Å>4R§¯RªRsdB³4V4¨Iª¨¦4¦[¨8» £ >~³#¦[ª¨§¢§¯»«{¬=ºB'r¨hyB¡¢s49¦
(k + i)
[V¨V¨I±yR9Fª!®R° R§¢9ªRs[[c4V·¦[¡¯ºBs ¼,¬
~¡¢©¨I'[²V¨I§¢§¯»
ª8¨I~[[~§¢R³¢¡¢³ ¡¢
i
i
~Rº¨[¡®!½ £
à º¨I¡¢2«)¡¢³
«V¬=uºB9¨·¨IbbÅ,[~'Å@9V°.B¡¢s['¦ £ ¨I§¢²~RB³ 4²~©[V¨
¡¢
~#
k+i=n
i
k+i
±y9¬=R9
¨V°
§¢8¨I°
[g²~~°~ VV9°
±yRV¨R®¡¯#¦ £
0
É^'
²~
¦49y8¨n[~yB¡¢s=[V¨=¬=u¨R®uª¨I°~±yR³#¦[u¡¢RB~~R9[¡¯B
¬¡[
¦©¨V°~BªÀ¨IR9R4
¡¢ R9[¡¢B £ È £ " Ê`±s»h°~R³_¨I²~§¯R«[~9¦[E¨N¦[d¨N±bB§¢²)[R§¯»~g©~R[¹[V¨=[~E¨±y!®¦[R¸²~¡¯¦4RªRs4
¡¢~°~RR°5~B§¢°2«e¨I~°5¡¯W¡¢WRs[¡¦[R§¯»Æ»B²)¦k¦[Rb.BVb¡¯±V¡¢§¢¡¯»j[ª¨¹h4²)¦[
[V¨g[~¡¢r¡¢r[~8¨I4 £
´~¨I¡¢§¢²)¦[
[/°V/4/¬¡¯§¢§¦[94²~§¯¡¢5~¦[Bº#¦©¨Iª 9¦[¨I4~RR«b4¦©¨I~ºB±y9¨R®¡¢#¦B³[~~¦[Bº#¦[¨IªY«e#¦
¼,~¦[#±¨±V§¯» [~F¬=#¦4b49RV¨¦[¡¢H½4RRª¡¢~ºB§¯» ~#¦[ª¨§±.RV¨8®¡¢#¦8«±V²)h¬
¡¯[4VFy#[RH[¡¨I§B³
[²)¦[~¡¢~ºr¡¢s[rb4¦[¨I~ºB±y9¨R®¡¢#¦¨¨s»[¡¢ª#«#¦
BY¨s»c#[~9¦ª¨I©V¡¯V £
¿ ~9¦4R³#¦[#«V§¢9²~4²~ªª¨¦4
¡ R
[~¦[R¸s²V¡¦[RªRH[=BV9dª#¦[#Ê
8"B"
#
%eªr²~byyB¡¢H2[4VR§¯RªRs^B³H¡¢~°~'µ
¨I~°
"!#&%ªW²~bV¨R®d4Bª®I¨I§¢²~
i
k
4²~4¨N
¡¢4Bª¨¦4¦©¨R»B³H§¢R~º#[
0 k+i n
¡¢V¨¦4»c4²)±~4¦©¨I'[¡¢Bc¡¢b¡¢ª¡¢§¨¦ £ >³)"!#&%¨®I¨I§¢²~
#
%
−
"!#*%
i
n
«N¬~9¦[
0 k n
«
£
4²~©[V¨
0 k−i n
«V[~R
»¡¯R§¢°~¨yB¡¯s[9¦=[r[~d¨N¦4¦©¨R»cR§¢RªRHB³p¡¢~°~'µ
£
k−i
¨I~°
B³)[~¬=#y'¦©¨[#¦[9«¨I~°4V²VV¨¦b»E¡¢~9¦[9ªRs¨I~°
¿ ~=¨Ib4¡¢ºB~ªRs{®9¦[4¡¯BV
+=
-=
°~R9¦[9ªRs#y9¦[¨[#¦[
¨V°
8¨IS±y²~4R°F¬
¡¯[S§¢R³¢#y9¦[¨I~°VB³yB¡¢H[9¦»yW¨I¬=R§¢§,«
¬¡[S4Vr²~4²V¨I§ª8¨I~¡¢++
~º £ ¡¯V-9r~¦[R9R°~R~RRE¨V°¨I44sR¡¨4¡¯®¡¯4¡¢R¨¦4r[¡¯R°F[[~r#y9¦©¨4#¦
b»ªr±yB§¯R«[~9»
¨¦[d¨I¡¢ ¿ ¨N±§¯ Bh¨IºB ¤H£
!¬ ¬=8¨Ih²V~°~9¦[l©¨I~°h[~4RRB~°Y§¢¡¢~B³p4Vu¨±y!®R°~d³¢¦[¨IºBªRsRÊ
bool * end = crossed_out + 1000; // pointer after last element
´p¡¯¦[l8«{[~g¨¦4¦©¨R»
¡¯uRBH®9¦4[9°/4¨c.B¡¢s['¦4¡¯[ ~¦[buR§¢RªRHg¼0[~WB~
B ³¡¢~°~'µ ½ £ ¡¢~R4Vcrossed_out
d¨¦4¦©¨R»
V¨I
R§¯RªRs4R«~¨I°~°~¡¢~ºr[~u¡¢s[9ºB9¦
»¡¢R§¢°~¨¨IblÅ
0
1, 000
1, 000
[~'Å>R~°hyB¡¢H[9¦
³#¦[~u¨¦4¦©¨R» £¿ ~4²)±V4R¸²~RH§¢s#
end
for ( bool * p = begin ; p != end ; ++ p)
* p = false ; // * p is the element pointed to by p
¡¢k9§¢8¨¦gV!¬¨g¬=R§¢§>Êhb©¨¦44¡¢~º¬¡¯4 ¨FyB¡¢H[9¦
4j[~ ~¦[bR§¯RªRs
¼
½«[~
R§¢9ªRsyB¡¢s4R°[¡¢b9[ c¼
½ p£¿ ~RY¬=·¡¢~9¦[9ªRs pbk=[Vbegin
¨¡¯yB¡¢s4
*p = false
p
[·[~~'µ=9§¢RªRH¼
½
£ ¦[9.8¨[~¡¢=¨e§¢B~º¨I ¡¯e°V¡ 9¦[9s=³¢¦[Bª [~¨IblÅ>[~'Å>R~°
++p
p
yB¡¢H[9¦V¨IªR°
£
end
¨I~°
[V¨
!=
4¡¢ªkV§¯»4Rb¬
V'[~9¦
[~¬=k.B¡¢s['¦[¡¯Y¸²~Rb[¡¯ByB¡¢s[g4Vd[¨Iª#±ÄR9 £ ²)¬=E8¨I
¨I§¢bWRBªk¨¦4¬=ryB¡¢s49¦[=²~4¡¢~ºW[~#y9¦©¨N[#¦[ «
« «V¨I~°
£ à º¨¡¢2«V¦4RRR°~R~RR
¨I~°
>
>=
¨I4bR¡¨N[¡¯®¡[¡¢RB³¨I§¢§.¦[R§¢¨[¡¢BV¨I§.#.9¦©¨[#¦4
¨¦4d¨I<¡¢ <=
¿ ¨±V§¢ Bh¨IºBuÈ "£
´)#¦[~
¦[Rb²V§[d±y
byRR¡ 9°^«H[~9¦[ªr²~b±.¨Ic¨¦4¦©¨R»gB³y4Bª
§¢9Vº#4 «s4²~©c[V¨[~
n
§¢R³¢
#y9¦©¨V° #
%¡¢
¨WyB¡¢H[9¦[g[~E9§¢RªRH
B³`4Bª¡¢~°~'µ
¡¯h[~·¨¦4¦[¨8»«
k1 , 0 k 1 n
¨I~°[~4RRB~°
#y9¦©¨I~°#
% ¡¯e¨dyB¡¢H[9¦[E4V9§¢RªRHeB³24Bª¡¢~°~'µ
¡¢
k2 , 0 k 2 n
[~4¨Iª¨N¦4¦©¨R» £ à º¨I¡¯^«
¨I~°
¨¦[e¨§¢§¢!¬=R°E¨I~°·R#¦b¦[RbyB~°E[[~¨IbbÅ,[~'Å@9V°
k1 = n
k2 = n
8¨Ib £
¡¯®9j[~¡¢R«{4Vr¦[R4²~§¯uB³[~W.B¡¢s['¦dRBªk¨¦4¡¢4B¡¯d°~9[9¦4ª¡¢~R°F±s»F[~W¡¢s[9ºB9¦ERBªgÅ
¨¦[¡¢bBB³
¨I~°
£ >Y#[~9¦
¬=#¦4°Vu¼@¨I~°Y¸²~¡¯4d¡¢H[²~¡¯[¡¯®R§»~½'«4VyB¡¢H[9¦[g[~d9§¢RªRH
k1
k2
[V¨RBªR ~¦[b¡¢
4Vu¨¦4¦[¨8»c¡¢=[~4ª¨I§¢§¢'¦=BV £
>B²)¦dRs°~g³¢¦©¨IºBª9s8«y[~rRBªk¨¦[¡¢4B
[~9¦[9³#¦[W»¡¢R§¢°~ % ¨Iu§¢B~ºh¨
¡¢
p < end
~#¨·¨IbbÅ,[~'Å@R~°YyB¡¢H[9¦ ~R¸s²~¡¯®#¨§¢Rs4§¯»«~¨I
§¯BVºg¨I .B¡¢s[=[g¨I¨I9[²V¨I§{¨¦4¦[¨8»
R§¢9ªRps £
p
¿ V§¢s#h[~9¦[9³#¦[d°~9¬
¨N¬=¬¨IsRÊ¡b9[¨§¢§2¨¦4¦©¨R»cR§¢9ªRs[e[ £
Á=Bªk¨¦4¡¢~º¬=yB¡¢H[9¦[p4¨N`°~V#ªR9[~e¨N±yN®¦4R¸²~¡¯¦[9ªRs[{§¢8¨I°~p4²~~by9R¡ VR°
¦[Rb²V§[¡¯
[~³B²~¦
#y9¦©¨N[#¦[ «
« «V¨I~°
£
Pointer comparison.
WV¨8®W¨I§¯¦48¨I°)»°~¡¢4R²~449°[~r¦4R§¨[¡¯B¨§#y9¦©¨N[#¦[
< <= >
>=
==
`©
8"#¤
¿ V'¦[k¡¢EB~kª#¦4g¨¦4¡¯[~ª9[¡¢#y'¦©¨[¡¢BBjyB¡¢s49¦[ £ à 4b²Vªr[V¨
#
% ¡¢u¨.B¡¢s['¦4
[~rR§¢RªRHB³4Bª¡¢~°~'µ
¡¢j4Bªr¨¦b¦©¨R»B³§¢R~º#[
k1 , 0 k 1 n
«y¨I~°Y[~·4RRB~°S#y9¦©¨V° #
% ¡¢¨WyB¡¯s[9¦
[k[~·R§¢Rª9sB³4Bªu¡¢~°~'µ
n
0 k2 ¡¢<[~4¨Iªh¨N¦4¦©¨R»¾¼,¨IlbÅ>[~'Å>R~°JyB¡¢H[9¦[g¨I§¢§¢!¬=R°½ £5¿ ~RJ[~h¦[Rb²V§kB³k[2~,c
].3B*,+214%R7
n
M9A^T!1>79&~\81>*l3B+
Pointer subtraction.
#
%
−
#
%
¡¢
4Vd¡¢s[9ºB9¦
£¿ ²~R«CyB¡¯s[9¦
4²)±~4¦©¨I94¡¢Bh[R§¯§¢
²~ b~N¬ ³_¨¦¨NC¨N¦4 [~E¬=¨¦b¦©¨R»
k1 − k 2
R§¢9ªRs[¨¦[ £¿ V±yRV¨R®¡¢#¦B³pyB¡¯s[9¦4²)±~4¦©¨I'[¡¢Bh¡¯
²~~°V ~R°h¡¢³*#
% ¨I~ ° #
% ¨¦[u~#
yB¡¢H[9¦[e[WR§¢Rª9s[=¡¢j¼,#¦¨IlbÅ>[~'Å>R~°yB¡¢H[9¦[=B³b½e[~[¨Iª¨¦4¦[¨8» £
pB¡¢H[9¦4²)±~4¦©¨9[¡¢B¼,¬
~¡¢©YRªkV§¢N»[~d±V¡¢V¨¦b»h4²)±~4¦©¨9[¡¢BY#y'¦©¨[#¦8«V4R ¿ ¨±V§¢ B
¨IºB ¤H ³#¦¡¯[elyRR¡ VR[½e°~sR~#=sRR²)¦
¡¯c[~Rs°V³¢¦©¨IºBª9s=³¢¦[Bªw[~±yRºB¡¢~~¡¢~º·B³{4V¡¯
4R'[¡¢B £ à »s¡¯8¨I§^²Vb·¡¢
[°~9['¦[ª¡¢~4Vd²~ªr±.9¦B³R§¢9ªRs[¡¢¨IS¨¦4¦[¨8»
[V¨¡¢ºB¡¯®R
±»
¨·yB¡¢H[9¦=[g¡[ ~¦[l
R§¯RªRs¨V°¨¨IblÅ>[~'Å>R~°hyB¡¢H[9¦ £
> ¦[8¨I§¯¡¯»«H[~4²)±V49¦4¡¯~e#y9¦©¨N[#¦
¨I¡¯s4¦[s°~²V9R°¡¢c R94¡¢B £ È £¥" °~R~##y9¦©¨4B¨¦4¦©¨R»R«±V²)ByB¡¢H[9¦[ £ >H®#¹¡¢~ºd4V[]
¡¯
#y9¦[¨[#¦=B
¨I¨¦b¦©¨R»RB~b4¦[²~94
¨Ic'µV¦4R44¡¢Bh¨I~°c4V'¦[R³#¦[4¦[¡¢ºBºB'¦[=¨I
¨¦4¦©¨R»sÅ,[IÅ>.B¡¢s['¦
RBH®9¦[4¡¢B £
¡¯®9Y¨.B¡¢s['¦ #
%r¨V°h¨I'µ~¦[R44¡¯B "!$#&%B³p¡¯s[Rº#¦[¨I§y»sy#«)[~'µ~¦[Rb4¡¢B
Pointer subscripting, or the truth about random access.
#
% "!$#&%'
¡¢R¸²~¡¯®I¨I§¢9s¼@¨I§¢bW¡¢h¡¯[e¦[R¸s²V¡¦[RªRH[=B
#
%¨I~° "!#&%B½[
#
%
 "!$#&%½
> ³ "!$#&%·V¨I®I¨I§¢²~ « [~§¨4['¦e'µ~¦[944¡¢Bc»¡¢R§¯°V[~u¨N¦4¦©¨R»R§¢9ªRs V§¨IRR4r[~¦[¡¯ºBs=B³
[~BVyB¡¢H[R°[=i±»
# % £ >C¨N¦4[¡¢R²~§¨N¦8«!¡¢³ #
% ¦[R4²~§¯[^³¢¦[Bª ¨I·¨N¦4¦©¨R»siÅ,[IÅ>yB¡¯s[9¦29Bs®9¦[b¡¢B2«
¼
[~¡¢¨Iº#¦[R9¬
¡¯[W4V4Rª¨s[¡¢9B³¦©¨I~°~Bª ¨RRR4³#¦e¨¦b¦©¨R»¨I¡¢H4¦[s°V²~R9°g¡¢ 99[¡¢B £ È £ "£
¿ ¨±V§¢ ¤ b²Vªª¨N¦[
¡ RR4V~9¬ yB¡¢H[9¦bÅ>byRR¡ ±V¡¢V¨¦4»#.9¦©¨[#¦4 £
Description
b²~±V4'¦[¡¯~
°~9¦4R³9¦[R~R
¨°V°)¦[94
Table 4:
Operator
[]
*
&
Arity
Prec. Assoc.
È
È
¢§ R³¢
¦[¡¢ºBs
¦[¡¢ºBs
7R%'\9%(~%R+`\9%8M·&+(&HMRMI3I\R*l&H1>*0a#*>1>*l%8M3[Z]y3B*0+214%R73R]y%R79&H143B7!Mmkx?.%M'A{T!MI\978*]^13R]y%979&H143B7
%!].%9\81@M78a&HOPAp%RM&HM3R]y%R79&+(HMu&+(E7R%81>AC78+2M&+OXa&HOPAp%mx?.%(~%R7R%>Z%R7R%R+`\'%3R]y%R79&H143B7
%!].%9\81@M&+78as&HOXA{%&+(
7R%81>A78+2M&+OPa&HOXA{%Rf;?*>O_%r1@?.%c&)()(79%8MRMk3R]y%R7'&H143B7h%!].%9\81@M
&+JOPa&HOPAp%&+(7R%R1>AC78+2Mc&+<78a&HOXA{%Im
8"
S³_¨¦W¡¯4RRª·[V¨·4VB~§¯»²~4cB³=yB¡¢s49¦[¡¢E[
ª¨¹¡[9¦©¨4¡¢BJ[)¦[B²~ºBQ¨I¨N¦4¦©¨R» ¨§¢¡4[§¢
ª#¦[ gR¡¢RH[V¨I ¡¯[9¦©¨N[¡¢BJ±»J¡¢~°Vµ £ ²)
²~~§¢R4¬=¨¦[¡¢g[~¦[8¨I§¢ª B³y'µ4¦[RªR§»·[¡¢ª'Å>9¦[¡¯[¡¯8¨I§§¢s#VR«B[~
[¨R®¡¯VºB¨¦[ª¨¦[ºB¡¢V¨I§ £ ´)#¦
[~
4¨¹B³.¦[8¨°¨N±¡¯§¢¡¯»«#¬=
[~9¦[9³#¦[B³¢[Rl[¡¢§¢§V²~4¡¯['¦©¨[¡¢Br±»W¡¢~°~'µ £ E¬
¨N¡¢[~
¦[8¨§
IJ~b[¡ V8¨4¡¢B
³#¦[~yB¡¢s49¦RB~R9~Î
¿ ~9¦4¨¦[g¨I9[²V¨I§¢§»Y¬=rIJVl[¡ V8¨[¡¯BV9«{¨V°B~WB³[~Rª ¬
¡¢§¢§±yW°~¡¢4R²~449°j¦[¡¢ºBsd¨R¬¨R»
¡¢[~~'µ4R9[¡¯B^Ê`yB¡¯s[9¦4e¨¦[¡¢~°~¡¢b.R~[¨±V§¢³#¦=ºB94[¡¢~º l~¦©¨I'[¡¢8¨I§ ¨¦4¦[¨8»¬¡¯4§¢R~º#[
~#¹~N¬
¨RBªkV¡¢§¢[¡¯ª £
¿ ~W4RRB~°YIJVl[¡ V8¨[¡¯BF¡¢u~#u»9·¨¦[B²~~°[~gR#¦4V'¦8«p4¬=r¬¡¢§¯§`BV§»S±~¦[¡¯ ~»S4B²V©
¡¯~9¦[ £ à ¦4¦[¨8»¨¦[±»h³_¨¦~#
4VuB~§¯»h9Bs©¨I¡¯V'¦[³#¦49[B³`°V¨[¨ £ ~RY¬=d¡¢ªkV§¢Rª9s
°V¨©¨V¦4RRb4¡¢~º¨I§¢ºB#¦4¡¯[~ªR«¬=EbVB²~§¢°4V'¦[R³#¦[Eª¨N¹d4²)¦[d4¨N
[~9»
¬=#¦4¹+`31B~§¯»
³#¦
¨¦4¦[¨8» £
´)#¦'µ~¨IªkV§¢I« V~°~¡¢~º¨gRBH©¨I¡¢~9¦
R§¢Rª9s
¬
¡¯[¨gºB¡®RYV¦4#y9¦4»j¼,ªN®¡¢4VR¨[9¦4¨N
V§¨R»E»B²)¦W³_¨8®#¦4¡¯[ª!®¡¢!½4~B²V§¯°Æ±yyBb4¡¯±V§¢³#¦Y&+y:JRBH©¨I¡¢~9¦44¨N 9¦[·[~³²~~'Å
[¡¢BV¨I§¯¡¯»
B³¡¯49¦©¨[¡¯VºgN®9¦¡[R§¢Rª9s[ £
¿ ~B~§¯»²~~¡¢³#¦[ª¡»¬=·~RR°S¡¢¡¯4V·¡[9¦©¨4¡¢B
~¦[9R4
¡[4R§¢³ £
à s»J°¨N©¨NÅ>~¦[sRR4b¡¢~º¨I§¢ºB#¦[¡[~ª B³[~ÁÂu b©¨I~°V¨¦[° §¢¡¯±~¦©¨N¦4»¼0¬=h¬¡¢§¯§49Y4BªB³
[~Rª §¨[9¦©½¬=#¦4¹g¡¢J[~¡¢r¬¨R».ÊY¡¯W'µ.R9[k[~
²V~°~9¦[§»¡¢~º9Bs©¨I¡¯V'¦g[j 9¦*,14%R79&H143B7!M
RB~³#¦[ª¡¢~ºc[4BªW¬=R§¯§Å@°~ V~R°¡¯['¦©¨[#¦·9BV99~ £Y¿ VlyRR¡ VR·B³4V9Bs©¨I¡¯V'¦·¡¯[49§¢³
¨¦[¡¯¦4¦4R§¢9®I¨Is³#¦[~d¨I§¯ºB#¦[¡¯[~ª £
(
9¦[¡¢¬
~9¦[EyB¡¢H[9¦[
RBª·¡¢2Ê4V'»¨¦[E[~¡¯['¦©¨[#¦[
9¦[9°S±s»S¨¦4¦©¨R» £u¿ ~9¦[R³#¦4#«
9®R¡¢³^¬=d°~B2Ç ²~4dyB¡¯s[9¦4¡¢
B²)¦!¬Rs°~#«V¬=V¨R®u[g¹~N¬ ¨±yB²)[~RªÀ¡¢#¦[°~9¦[
±yu¨±V§¢[k¨NVV§¯»l©¨I~°V¨¦[°§¢¡±V¦[¨¦4»¨I§¯ºB#¦[¡¯[~ª[W¨¦4¦[¨8» £
What have we gained with pointers?
2.6.9 Dynamic memory allocation
É 9²VºB±C¨©¹[ `¦[Bº#¦©¨Iª 8" V!¬ £ ,[ª¨¡¢·°)¦©¨R¬
±¨I[¹r¡¢`[V¨`[~s²~ªr±y'¦ ¡¢V¨¦[°)¬¡¯¦4R°
2
¨I
¡¢g[~¡¢~¦[Bº#¦©¨IªY«RIJ~b±yR8¨I²~4[~§¢9Vº#4kB³y¨I¨N¦4¦©¨R»gV¨I[d±.¹V!n¬¨NRBªkV¡¢§¯
[¡¢ª1, £ 000
à d§¢R¨Ib¡¢S[~¡¢¦[Rby998«{¨¦4¦©¨R»u¨¦[~#[~¡¢~ºbyR9¡¨I§>«.[~B²~ºB £ à §¢§p»syR[V¨¬=WV¨R®
ª9eR¨¦[§¢¡¢'¦¼
«
«)¨I~°
½V¨8®[~~¦[#y'¦4»[V¨¨E4¡¢~ºB§¢#±VÄR9=B³2[~
»yR9²~V¡¢9int
¨ )µunsigned
R°¨IªB²~sint
B³.ªRª#bool
¦b»E¹~!¬k[d4VRBªkV¡¢§¢9¦=¼,³#¦'µ)¨IªkV§¢#« " ±V¡¯[³#¦
¨I
#±ÄR9uBª¨s»YV§¨[³#¦4ª©½ £ ¡¯[¨¦4¦©¨R»R«p¨#±®¡¢B²~V9R°/¨¦[¡¢bR[hR¡¦[R²~ªr®9s
int
[~¡¢e¦[Rl4¦[¡¢94¡¢B £
>LÁÂu·«¨¦4¦[¨8»¬~B4§¢R~º#[¡¢°~9[9¦[ª¡¯V9°¨¦[²~H[¡¢ª8¨±y#±~©¨I¡¢~R° [)¦[B²~ºB
(:H+&Dh*b\SD%9D3B78:¾&HO,O_3#\&H1>*b3B+ £Æ¿ )¦[B²~ºB4²~J¨I5¨I§¢§¯8¨4¡¢B2«p¬=
'¦[8¨[
¨I#±ÄR9r¬¡[
(:H+&Dh*b\db[#¦©¨ºBu°~²)¦©¨[¡¯B £
±VÄR9[·[V¨·¬=V¨R®4RR<4³_¨¦¬=9¦[c¨I§¢§[¡¢R°/[Y®#¨N¦[¡¨±V§¢R9«`¡¢Æ¬
~¡¢©8¨4ªRª#¦4»
ºB9[¨I44¡¢ºB~R°¾4<[~Rª ¼>¨I~°L¡¢h³¢¦[9R° ¨Iº¨I¡¢½¨h~¦[R°~949¦[ª¡¢~R°QyB¡¢s4h°~²)¦[¡¢~º~¦[Bº#¦©¨ª
'µRR²)[¡¢B¼@¨I²)[Bª¨[¡¯g¨I~°b©¨[¡¯b[#¦©¨IºB°~²)¦©¨[¡¯B^« 99[¡¢B £¥¤)£ " ½ £ ±ÄR'[WB³°)»V¨Iª¡¢
b[#¦[¨IºB°V²)¦©¨N[¡¢B¨¦[cV#[¡¯R°[®I¨¦[¡¨±V§¢9R«¨V°Æ[~9»/ª¨R» bb©¨¦br4F§¢¡® ¼>ºB9WªRª#¦4»
¨I4b¡¢ºB~R°5[[~Rªc½W¨I~° b°~¡¢ ¼>ºB94V9¡¯¦ªRª#¦4»Æ³¢¦[9R°½¨N&+y:yB¡¯sk°~ ²)¦[¡¢~ºj~¦[Bº#¦©¨ª
'µRR²)[¡¢B £¿ VV¦4Bº#¦©¨Iªª9¦ 8¨°V'[9¦[ª¡¢~=[~R4yB¡¢s4®¡¢¨
¨I~°
'µ~¦[R44¡¯BV £
new
delete
`©
8" È
¿ ~~¦[Bº#¦©¨ª V¨I4Bªu¼,»V¡¢8¨§¢§¯»¸²~¡¯4§¨¦[ºB8½¦[RºB¡¯BB³.[~RBªkV²)[9¦8Ç ª¨I¡¢gªRª#¦4»
¨R®#¨¡¢§¨±V§¢g4Sl[#¦[°)»V¨Iª¡¢8¨§¢§¯»F¨I§¢§¢s8¨[9°#±ÄR94 £j¿ ~¡¢E¦[RºB¡¢BÆ¡¢·8¨§¢§¢R°/[~Y?.%'&8] £ ,¡¢
¡¢~¡¯[¡¢¨I§¢§¯»²~²~49°^«.±V²)¬
V9¨I#±VÄR9¡¢°)»V¨Iª¡¯8¨I§¢§¯»c¨§¢§¢R¨[R°2«V¡¯¡¢
±.R¡¢~ºb[#¦[9°FB[~
~8¨^«~4W4¨N4VªRª#¦4»¨I9[²V¨I§¢§»²~4R°±»[~~¦[Bº#¦©¨Iª º#¦[!¬ £
(
9¦[¡¢~!¬6[~¡¢¬=#¦4¹³#¦ `¦©¨[Bl[~R~RRÇ^ ¡¢9® £ Rª9ªr±y'¦
[V¨¬=·¬¨IH4V·§¯¡¢bB³
~¦[¡¢ª²~ª±y9¦[±y9¬=RR
¨I~°
³¢¦[Bª
£¿ ~k³B§¢§¢!¬¡¢~º®I¨¦[¡¨IHd¦[R¨I°~u[~gs²~ªr±y'¦
n−1
n
b©¨V°V¨¦4°¡¢)²)d¨I~°°)»V¨I2ª¡¢8¨§¢§¯»
¨I§¯§¢8¨N[Ru¨I/¨¦4¦©¨R»FB³e§¢R~º#[
~
g
4
¦
R
ª
I
¨
¢
¡
~
~
°
9
¦
B
³
[~
£c¿
n
~¦[Bº#¦©¨Iª ¡¢·¨Id±.R³#¦[#«'µR9~·[V¨E¬='µV§¢¡¢R¡¯4§¯»S¨R®k[Y³¢¦4R[~°~»V¨Iª¡¢8¨I§¯§¯»¨I§¢§¯8¨4R°
b[#¦[¨IºBu¡¯
[~R~° £
# include < iostream >
// Program : eratosthenes2.C
// Calculate prime numbers in {2 ,... ,n -1} using
// Eratosthenes ’ sieve .
int main ()
{
// input
std :: cout < < " Compute prime numbers in {2 ,... ,n -1} for n =? ";
unsigned int n;
std :: cin > > n;
// definition and initialization : provides us with
// Booleans crossed_out [0] ,... , crossed_out[n -1]
bool * crossed_out = new bool [ n ];
// dynamic allocation
for ( unsigned int i = 0; i < n ; ++ i)
crossed_out[i ] = false ;
// computation and output
std :: cout < < " Prime numbers in {2 ,... ," < < n -1 < < " }:\ n ";
for ( unsigned int i = 2; i < n ; ++ i)
if (! crossed_out[i ]) {
// i is prime
std :: cout < < i < < " ";
// cross out all proper multiples of i
for ( unsigned int m = 2* i ; m < n ; m += i )
crossed_out[ m ] = true ;
}
std :: cout < < "\ n";
delete [] crossed_out ;
return 0;
}
// free dynamic memory
#[[V¨4Vu®#¨¦4¡¨±V§¢
new
£
n
Program 14:
8"
]27R39-M %R79&H143MR1@?.%R+`%RM.mt
¡¢~N¬¨r.B¡¢s['¦¦©¨N[~9¦
[V¨I¨Y¨¦4¦©¨R» .¨I³¢['¦
[~
°~RR§¨N¦©¨[¡¢B2«¡.B¡¢s[e[crossed_out
r[~ ~¦[l
R§¯RªRs=B³¨r°)»V¨Iª¡¯8¨I§¢§¯»g¨I§¢§¯8¨4R°h¨N¦4¦©¨R»cB³p§¢R~º#[
´)#¦¨Is»
»sy «.¨
The new expression.
[)¦[R®I¨¦[¡¨IH[ £
new
'µ~¦[944¡¢B8¨ISRBªu¡¢S¨Is»hB³[~·³B§¢§¢!¬¡¢~º
new
¼ £¯££ ½
new
"!#*%'
new
> 5¨I§¢§=8¨4RR«4Vc'µV¦4R44¡¢BJ¦49[²)¦[~g¨<¦4®I¨I§¢²~
B³»y 8£ ,[®#¨I§¯²Vc¡¢·[~¨°V°)¦[94
B³¨I#±VÄR9rB³e»y [V¨V¨IE±yR9<°)»V¨Iª¡¢R¨I§¢§¯»F¨I§¢§¯8¨4R°B[~~8¨ £¿ ~#±VÄl99
¡¯[bR§¢³¡¯d¨I~BH»ªB²~R«y±V²~u¬=W²~4²V¨I§¯§¯»b[#¦[r[~W¦[94²~§¯[¡¢~º
¨I°~°~¦4R4d²~~°~9¦·¨®I¨¦[¡¨±V§¢rV¨Iª £
> `¦[Bº#¦©¨Iª R¤ «)¬=8¨I§¢§2¡¯
£
crossed_out
µ~¦[R4b¡¢B5¡¢[j°)»V¨Iª¡¢R¨I§¢§¯»
>J[~ ~¦[bk¨I~°J4R9BV°5
®I¨¦[¡¨s8«4V
99kB³[~
new
¨I§¢§¯8¨4=¨rM9*0+.-O_%d#±VÄR9B³C»y Bg[~~8¨ £ ¨¦[¡¨IH §¢8¨R®R[~#±VÄR9²~V¡¯V¡[¡¨I§¢¡ RR°·¡¢³
T
¡¢¨
³²~~°V¨IªRH©¨I§s»sy#«#¬~¡¢§¯®I¨¦[¡¨IH ¡¢~¡¯[¡¨§¢
¡ RR2[~e~9¬5#±VÄR9¬
¡¯[·¬V¨['®9¦¨~y8¨N¦[
¡¢Y¨¦[RH[~R4R £ ´)#¦µ~¨IªkV§¢#«V[~E³B§¢§¢!¬¡¯VºW°~RR§¨¦[¨[¡¢B~
¡¯V¡[¡¨I§¢¡ R[~E®#¨¦4¡¨±V§¢R ¨I~° «
i
j
±y#[
B³p»y
«)¬
¡¯[
4Vu¨I°~°)¦[R4bR
B³^¬=W~9¬ #±ÄR94B³p»sy
£
int*
int
int * i = new int ;
int * j = new int (6);
// * i is undefined
// * j is 6
¢¡ ºBHe~N¬d«¡¢³.¬=¬¨s[R°¬=·4²~©h#±VÄR9[B³y».
«s¬=#Ç¥°¦©¨[~9¦²Vb®#¨¦4¡¨±V§¢R¬
¡¯[
int
¨I²)[Bª¨4¡¢b[#¦[¨IºBu°~²)¦©¨4¡¢Bh¨V°
¬
¦[¡¯4
int i ;
// i is undefined
int j = 6;
// j is 6
h#¦[¡¢H[9¦[9b[¡¢~º³#¦²~¡¢[~[~¡¯¦4°g®#¨N¦[¡¨IH £ >³ "!#&%uV¨I¡¢s4RºB9¦®I¨I§¢²~
« [~
R9
B³e[~
'µ~¦[R44¡¯B¡¢E4Y°~»V¨Iª¡¢8¨I§¯§¯»S¨I§¢§¢s8¨[g¨Iƨ¦4¦©¨R»B³=§¢9Vº#4
¬¡[/²V~°~9¦[§»¡¢~º
new
n
»y B[~E~8¨ £¿ ~E¦[9[²)¦[®#¨§¢²~·¡¢
[~¨I°~°)¦[R4B³`[~ ~¦[b9§¢RªRH £¿ ~¡¢¡¢
¬
¨N
¬=4Rd¡¯§¢¡¢~ ÈWB³ ¦[Bº#¦[¨Iª R¤)£
à ²Vb²¨§>«[~
¨N¦4¦©¨R»cR§¢RªRH[e¦[Rª¨I¡¯
²~~¡¢~¡¯[¡¨§¢
¡ RR°¡¯³ ¡¢
¨³²~~°¨ªRs©¨§.»sy £
n 0
n
»V¨Iª¡¢8¨§¢§¯»S¨I§¢§¯8¨4R°ªRª#¦4»S[V¨¡¢·~§¢B~ºB9¦~RR°~R°4~B²V§¯°
±yu³¢¦[RR° £ >SÁÂu·«4V~¦[Bº#¦©¨Iªª'¦=°V9R¡¢°~R¨N¬
V¡¯
yB¡¢s=[~¡¢¡¢[~u8¨4 £* »V¨Iª¡¢
The delete expression.
1I1'3
$@ +K)19 +- 5L+@5 3( KJK"5
!"#G<%$ *"8D(+-!9:1() K"(C
3()5H-%$@+
$@09
+JK@@5 ();"" '&)(*(+;KM(-,BK("7>9:( "@$" )5:9%@9:;1 <.$F
+J"J-D KL+() 3( %9%9:;?8;(N+8B2 +">/&)(*(
<
=7$().+()L() 81(+9*9*8!8 KN+8D"
9:9:1(-, $
$+
<
=7$"%+K)19
1(L+9%
*(;"">"%+5
`©
8"
b[#¦[¨IºB°V²)¦©¨N[¡¢BS¡¢ªkV§¢¡¢R[V¨°)»V¨Iª¡¢8¨§¢§¯»h¨I§¢§¢s8¨[R°#±VÄR9[§¢¡¯®²~s4¡¢§p[~·~¦[Bº#¦©¨Iª[9¦lÅ
ª¡¢V¨[9R«²V~§¢94[~9»k¨¦['µV§¢¡¢R¡¯4§¯»³¢¦[RR° £ »V¨Iª¡¢8¨§¢§¯»·¨§¢§¢R¨[R°kª9ª#¦4»¡¢ª#¦[ V'µ)¡±§¯
[V¨I
b©¨[¡¯uªRª#¦b»«s±V²)¡¯h¦[9[²)¦[h¡¯¨I§¢4r¡¢s®B§®RbBªu¨°Vª¡¯V¡¯b4¦©¨4¡¯®
#¦4 £
'µ~¦[R44¡¯BV©¨¹8¨¦[uB³p³¢¦[9R¡¢~ºkªRª#¦4» £¿ ~9»cRBª¡¢h¬=®#¨N¦[¡¨IH[ £
¿ ~
delete
delete
'
delete
!$#&%
!$#&%
>F±.#[F®I¨¦[¡¨s[R« "!#&%ª¨8»h±yr¨cs²V§¯§yB¡¢s49¦8«y¡¢S¬~¡¢©FR¨I4W4V
'µ~¦[944¡¢BjV¨I
delete
~g R9 £
4V'¦4¬¡¢b#«s¡¯W[~ ~¦[l®I¨¦[¡¨s8« "!#*%ªr²~b±y¨yB¡¯s[9¦[d¨b¡¢~ºB§¢=#±ÄR9[V¨V¨I~¦[Å
®¡¯B²Vb§¯»E±yR9k°)»V¨Iª¡¢8¨§¢§¯»u¨I§¢§¢s8¨[9°¬
¡¯[[~ ~¦[l#¦49RB~°g®#¨N¦[¡¨IHB³~[~
'µ~¦[944¡¢B £
new
¿ V
R'=¡¢[·ª¨¹[~R#¦4¦4RbyB~°~¡¢~ºEªRª#¦4»r¨R®I¨I¡¢§¨N±§¯
¨Iº¨¡¢³#¦e4²)±V4R¸s²V9s=°)»V¨Iª¡¢
¨I§¢§¯8¨4¡¢B~Bh[~VR¨ £
#±ÄR94°)»V¨Iª¡¯8¨I§¢§¯»g¨I§¢§¯IÅ
´)#¦'µ)¨IªkV§¢#«)¨¨·yB¡¢H¡¯
[~V¦4Bº#¦©¨Iªw¬~9¦[[~¬=
int
8¨4R°h[)¦[B²~ºB
int * i = new int ;
int * j = new int (6);
// * i is undefined
// * j is 6
¨¦[~g§¢B~ºB9¦~RR°~R°2«~¬=¬=B²~§¢°c¬
¦[¡[
delete j;
delete i;
¿ ~=#¦[°~9¦B³V°V9§¢9[¡¢B°~9~#ª¨449¦~9¦[I«H±V²)ª¨Is»dV¦4Bº#¦©¨Iªª9¦[^RB~4¡¢°~9¦¡¯§¯BºB¡¢8¨I§
[
yB¡¯s[9¦4
¡¢Y[~E¡¢H®9¦[4·#¦4°V'¦B³`°~»V¨Iª¡¢u¨I§¢§¢s8¨[¡¢B2Ê>³»B²~RR°[²~~°~g¬=
delete
b['9«~»B² ~¦[l
²~~°~r[~4RRB~°Yb49 £
>[~r4RRB~°j®I¨¦[¡¨IHB³[~
'µV¦4R44¡¢B2« "!$#&%ªr²Vl±.g¨yB¡¢H[9¦[[~~¦[b
R§¢9ªRspB³~¨Ir¨¦4¦©¨R»d4¨NV¨I~¦[9®delete
¡¢B²~4§¯»±yRR°)»V¨Iª¡¢R¨I§¢§¯»¨§¢§¢R¨[R°d¬
¡¯[E[~4V¡¦[°E®#¨N¦[¡¨IH
µ~¦[R4b¡¢B £¿ ~¬
VB§¯ªRª#¦b»RR²)V¡¢R°W±»g4V
¨¦4¦©¨R»W¡¢²)±C¨©¹WBk[~
~8¨N
B³C[~
new
³#¦¦[R²~4 £ c¿ ~¡¢V¨~yR~=¡¢§¢¡¢~ " B
³ ¦4Bº#¦©¨Iª R¤)£
>³p[~uV§¨¡¢
¡¢¨~V§¢¡¢9°
[g¨r~BÅ@s²V§¯§^yB¡¯s[9¦=[V¨°~R~#yB¡¯s[k¨r°~»V¨IªgÅ
¡¢8¨§¢§¯»F¨I§¢§¢s8¨[9°delete
4¡¢~ºB§¢g#±VÄR98«4Vk±.RV¨8®¡¢#¦E¡¯E²~V°~ V~R° £Y¿ ~[¨Iªk¡¢u4¦[²~k¡¢³=B~g4¦[¡¯R
[
¨I¨N¦4¦©¨R»¬~9¦4E[~9¦[·¡¢B~§¯»¨k4¡¢~ºB§¢E#±VÄR9 £ à ¨I§¬¨8»
¬¡[yB¡¢H[9¦[R«[~
ÁÂudelete[]
Â6§¨I~ºB²V¨IºB°~R~#
9¦
¨Is»cª8¨I~=B³°~9[99[¡¢~ºr4²~Y'¦4¦[#¦[ £
à §¯[~B²~ºBr¨I§¢§)ªRª#¦4»E¨I§¢§¢s8¨[9°r±s»g¨~¦[Bº#¦©¨ª ¡¯¨²~4Bª¨[¡¢8¨§¢§¯»³¢¦[RR°W¬~R
[~d~¦[Bº#¦©¨ª [9¦[ª¡¯¨N[RV#¦4ª¨I§¢§¯»«)¡¯¡¢
®9¦4»h±C¨°~¦©¨9[¡¢Ru[k¦[R§¯»B4V¡¯³_¨I9³#¦³¢¦4RR¡¢~º
°)»V¨Iª¡¢R¨I§¢§¯»/¨§¢§¢R¨[R°ªRª#¦4» £ >³¨~¦[Bº#¦©¨Iª °VsRk~#kµV§¢¡¢R¡[§¯»/³¢¦[R¨I§¢§°~»V¨Iª¡¢8¨I§¯§¯»
¨I§¢§¯8¨4R°5ªRª#¦4»¡¯¡¢4¨I¡¢° [/¨R®S¨<D%9D3B78:LO_%'&HG £ ²~©¾§¢8¨¹¨¦[YB³¢[9¾¨j4¡¢ºBQB³
±¨I°h9°~¡¢~º £¿ ~9»c²~4²V¨I§¢§¯»k¨R®uVr¡¢ªªR°~¡¨N[9BVbR¸²~R~RR9«±V²)¬
¡¯[~B²)=³¢¦[RR¡¯VºW²~²~4R°
Memory leaks.
=7$"
9%@H"M$@+2$@Q81$
$J"A J&M0PO ""
13?*5-;N+9*+-
$"781$
3(19
$
+B5
(18 (9
<
/!*1KN+-
((-
"A(5." 9:&'$()0&'H$
$@
8"
b[#¦[¨IºB#«~¨·V¦4Bº#¦©¨Iªw¦[²~~V¡¯Vºr³#¦
¨r§¢B~º[¡¢ª·¼,4V¡¯~¹B³{#y9¦©¨N[¡¢~ºb»b4RªÍ¦[B²)[¡¯V9©½ª¨8»c¨N
4BªyB¡¢H4¡¢ªkV§¯»'µV¨I²~b4Vu¨R®#¨¡¢§¨±V§¢~8¨b[#¦©¨IºB £
¿ ~9¦4R³#¦[#«~¬=uV¨R®u4V³B§¢§¢!¬¡¯VººB²~¡¢°~R§¢¡¯V £
Dynamic Storage Guideline:
~9¬ ¨I~°h°~R§¢'[uµ~¦[R4b¡¢B~
4~B²~§¢°¨§¯¬¨R»RBª¡¢hª¨4~¡¢~º·¨I¡¯¦[ £
2.6.10 Arrays of characters
R¸s²V9V9RB³p©V¨¦©¨9[9¦[R~R§¢B49°¡¢°~B²)±V§¢¸²~#[R§¢¡¯¹¡¢
std :: cout < < " Prime numbers in {2 ,... ,999}:\ n";
¨¦[8¨I§¯§¢R°M91>78*,+.-YOP*>14%979&HOM £ ³_¨¦¬=·V¨8®·²~49°Fbb¦[¡¢~º§¢¡¯['¦©¨I§¢B~§¯»h¬
¡¯[~¡¢B²)4V²)'µV¦4R44¡¢B~R«.±V²)¬=·8¨¬=#¦b¹
¬¡[d[~Rª6¡¯·#[~9¦RBH['µ[`¨Ip¬=9§¢§ £ hBl`~#©¨±V§¯»«¨
b4¦[¡¯Vº§¢¡¯['¦©¨I§H8¨IE±y²~49°4¡¢~¡¯[¡¨I§¯
¡ R
¨I¨¦4¦©¨R»B³·\8?C&7'&~\814%R7!M £ Á=V¨¦[¨I9[9¦4·¨¦[[~k±V²~¡¢§¢°~¡¢~º
±V§¢s©¹·B³e['µr¨E¬=k¹~N¬ ¡¯ £ >
ÁÂu·«V4V'»h¨N¦[uªs°~R§¢R°±»c[~u³²~~°V¨IªRH©¨I§.»y
[V¨=¬=u±~¦[¡¢ V»°~¡¢bR²~4~'µ £
char
¿ ~
³²~~°V¨IªRH©¨I§».
¦49~¦[R4RH[g©V¨¦©¨9[9¦[ £ ÁeV¨¦©¨I'[9¦[¡¢~R§¢²~°~
The type char.
[~Oi%R1@14%R7!M
[)¦[B²~ºB
¼>¨I§¢B~º¬¡¯4/4Vchar
9¡¯¦8¨V¡¯©¨§®9¦[b¡¢B~
[ )¦[B²~ºB
½'«[~(*i-B*>1@M
a
z
A
Z
0
[)¦[B²~ºB «¨¬=R§¯§{¨s²Vª'¦[B²~#4V'¦dMl].%9\R*&HO=\R?C&79&~\814%R7!Mr§¢¡¯¹ # ¦ £¿ V¢§ ¡¢~
9
char c = ’a ’;
°~V~R¨®I¨¦[¡¨N±§¯ B³».
¨I~°r®#¨I§¯²V
«B¦['V¦4R4RH[¡¢~ºu[~=§¢9b[9¦ £¿ ~'µ~¦[944¡¢B
c
char
’a’
a
¡¢¨§¢¡¯['¦©¨I§B³»y
£`¿ ~¸²~#[9`¨¦[B²~~°d[~e¨I'[²V¨I§s©V¨¦©¨9[9¦pb»ª±yB§H¨¦[~R9R4[¨¦b»
’a’
char
³¢¦[Bª [~u¡¯°V9s[¡ V9¦ £
¡¢
#¦[°~9¦
[r°~¡¢b[¡¯VºB²~¡¢bc
[~§¢¡¯['¦©¨I§
’a’
¡¢¨IF¡¢s4Rº#¦©¨I§».#Ê¡¯¨[~a[¨Iª#y'¦©¨[#¦[¨I[~»syR
´)#¦[ª¨I§¢§¯»«V[~r»sy
#¦
«)¨Ichar
~°[~Á l©¨I~°V¨¦[°9®RyBb[²~§¨N[Re¨u~¦[Bª#4¡¢Bg³¢¦[Bª
[
int
#¦ unsigned int £ ,·¡¢r+`31·byRR¡ 9°^«{[~B²VºB2«^[¬~¡¢©¡¢H[RºB9¦u[~k©¨N¦©¨I9[char
'¦
«
int
unsigned int
’a’
[¨R»«~¬¡¢§¢§±yu~¦[Bª#[9° £ ~°~9¦[~¬
¡¢°~R§¯»²~4R°
R°~W¼ ª9¦4¡¢8¨I ©¨V°V¨¦4° °~u³#¦
ASCII
A
S
C
~³#¦[ª¨N[¡¢B s49¦[©V¨I~ºB!½'«~¡¯¡¢=[~u¡¢H[RºB9¦
£
I
I
97
¿ ~¡¢eb94[¡¢~º·ª¨R»k~#=49Rªw®9¦4»²~4R³²~§>«)¨V°c¡¢~°~RR°c¡¯eª¨¹9§¢¡¯44§¢
49Vb4r°~¡¯®¡¢°~B~
©V¨¦©¨I949¦±»W¨I~#[~9¦ £ W4V=#[~9¦V¨I~°2«B¬=R¨Ig³#¦'µ)¨IªkV§¢~¦[¡¢H4V¨I§V¨±.9[)¦[B²~ºB
B~ub¡¢ªkV§¢§¢#¼@¨I4b²Vª¡¯Vº
R~Rs°V¡¯VºH½ £ `µRR²)[¡¢BB³{[~
Å@§¢s#
ASCII
for
for ( char c = ’a ’; c <= ’z ’ ; ++ c)
std :: cout < < c;
¬
¦4¡¯[Re[~V¨¦[¨I9[9¦
4R¸s²V9V9
abcdefghijklmnopqrstuvwxyz
7
B H$@( H(+"1
" (8 H(+" (7IHK@"K
K
J- ;
&M0&71 O '@5 $"A;()" 8Q3F)"<
$2/
13NA()-B8
)09:;5H3 -Q$@9
"
K@55
`©
R¤
[Wb©¨I~°V¨¦[°
B²~b²) £ ¡¯®Rh[~¡¢9«»B²ª¨R»[~¡¢)¹[V¨4V§¢¡¢~
std :: cout < < ’a ’ + 1;
~¦[¡¢H[
«±V²)W¡°VsR42Ç £ ¡¢~R[~#y9¦©¨V°~·B³[~c9BªkyB4¡¯[W'µ~¦[944¡¢B
¨¦4
B³°V¡ 9’b’
¦[9s»y9R«y[~·§¢R³¢#y9¦©¨V°SB³»sy
¬¡¯§¢§¨I²)[Bª¨N[¡¢8¨I§¯§¯»±yE~¦[Bª#[’a’+1
R°Y[[~
ª#¦[ºBR~9¦©¨I§C»sy
B³y[~¦[¡¯ºBs#.9¦©¨I~° £char
¿ ~9¦[9³#¦[#«[~».B³.[~'µ~¦[Rb4¡¢B
int
¡¢
«y¨I~°S¡¯[
®I¨I§¢²~·¡¢
¼@¨44²~ª¡¢~º
R~Rs°V¡¯VºH½y¨I~°S4¨N8Ç¥
¬
V¨ºB9[~¦[¡¢H[’a’+1
R° £ >³
int
ASCII
»B²h
¬IH
4W±y~¦[¡¢s98
4R°2«»B²ªW²~b
²~4[~u'µV§¢¡¢R¡¯=9Bs®9¦[b¡¢B
£
’b’
char(’a’+1)
¿ ~8¨[RºB#¦b»dB³lyRR¡¨§H©V¨¦©¨9[9¦[p¨I§¢4¡¢~R§¢²~°~R=\93B+21>7R3O2\8?C&79&~\814%97!M[V¨=(~34Bª'[~¡¢~º
¬~RQ~¦[¡¢s4R° £¿ ~R4F¨¦[Y¬
¦[¡4[R5¬¡[Q¨/§¯8¨I°~¡¢~ºj±¨I[¹4§¨42«¨I~° [~SªBl¡¢ªky#¦4[¨Is
RBH4¦[B§2©¨N¦©¨I9['¦³#¦²V¡¢
«)¬~¡¢©
8¨I²~4R
¨r§¢¡¯V±~¦[8¨N¹ £
’\n’
cªBbV§¨[³#¦[ª9«¨
®#¨§¢²~R9²~V¡¢9 ±V¡¯[B³yªRª#¦4» ¬~94V'¦[~
®I¨I§¢²~
¦©¨VºB
8
R#¦4¦4RbyB~°
4W[~49B³p¡¢Hchar
[RºB9¦4
¼,[~4¡¢ºB~R°c8¨I48½=#¦[~49
{−128, . . . , 127}
. . . , 255}
¼,[~·²~~4¡¢ºB~R°S8¨I48½¡¯¡¢ªkV§¢RªRH©¨[¡¯B
°~ V~R° £ ¡¯V9¨I§¢§ à )Á=be©V¨¦©¨I'[9¦[V{0,
¨R®r
¡¯s[RºB'¦
®I¨I§¢²~R¡¢
«4V'»
R¨Ih±y¦[9~¦[94Rs4R°¡¢
±y#4h8¨IbR £
{0, . . . , 127}
à [µe¡¢4¡¢ªkV§¯»r¨dbR¸²~R~RB³y©V¨¦©¨I'[9¦[e¨V°8¨k±yª°~R§¯R°k¡¢
ÁÂuÂ[)¦[B²~ºB¨Y¨¦4¦©¨R»¬¡[h²~~°~9¦[§¯»¡¢~º»sy
£ ´)#¦'µ~¨IªkV§¢I«[~u°~R9§¨¦©¨4¡¢B
From characters to text.
char
char text [] = { ’b ’ , ’o ’ , ’o ’ , ’l ’}
°~V~R
¨Y¨¦4¦©¨R»cB³§¢9Vº#4
[V¨=¦[9~¦[R49s[
4V['µ £
4
à §¯['¦[V¨[¡¯®R§»Y¼@¨I~°hª#¦49Bs®R~¡¢RH[§¯»)½'«)¬=u8¨h¬
¦[¡[
char text [] = " bool "
¿ V¡¯R«~N¬='®9¦8«)¡¢+`31R¸²~¡¯®I¨I§¢9se[·[~³#¦[ª9¦e°~R9§¨¦©¨4¡¢B £ V9¨I
¨¦4¦©¨R»B³^©¨N¦©¨I9['¦[
¢¡ =¡¢~¡¯[¡¢¨I§¢¡
R9°g¬¡¯4
¨·bb¦[¡¢~º§¢¡¯[9¦[¨I§>«s4V['¦[ª¡¢V¨[¡¢~º s%R7R3F\8?C&79&~\814%R7
¼,B³{¡¢H[RºB9¦e®I¨I§¢²~
’\0’
½¡¢d¨²~4Bª¨[¡¢8¨§¢§¯»h¨~yR~°~R°j[
4Vg¨¦4¦©¨R» £¿ ~¡¢d©V¨¦©¨9[9¦d°VsRd~#uR#¦4¦[9byB~°j[Y¨IH»
0
~¦[¡¢H©¨±V§¢d©V¨¦©¨9[9¦ £ à ³¢[9¦4V·§¢¨4[9¦
°~RR§¨¦[¨[¡¢B2«~[~·¨¦4¦©¨R»
[~9¦[R³#¦4rV¨I
§¢R~º#[ £
text
«
«
«e¨I~°
«e¨I~°<[~ ³¢4JR§¢Rª9sW¡¢r4V R9¦45
¿ V ~¦[bW³B²~¦gR§¢Rª9s[W¨¦[
’b’ ’o’ ’o’
’l’
©V¨¦©¨I949¦
£
’\0’
=8¨I§¯§)4²~g¨IW¨¦4¦©¨R» s%R793Ub14%R78D
*,+&H14%'( £ ~§¢¡¯¹V#¦4ª¨I§¨¦b¦©¨R»R« R9¦4IÅ>[9¦4ª¡¢V¨[R°r¨¦4¦[¨8»
l¹~!¬
[~R¡¯¦u§¢R~º#[ £k¿
ºB9[~¡¢u§¯R~º#[2«^¬=W4¡¢ªkV§¯»YV¨R®W[h¡¯[9¦©¨N[W!®9¦u[~k¨¦4¦[¨8»F¨I~°
RB²~s[ ~²~ªr±.9¦B³R§¢Rª9s[e±yR³#¦4[~[9¦[ª¡¢V¨4¡¢~º
£
’\0’
(
9¦[·¡¯¨IF¨~§¯¡¢8¨[¡¯BhB³=¼@¨¦4¦[¨8»B³4½V¨¦[¨I9[9¦4 £ q21>78*,+.-SDF&H14\R?*,+.-¡¢4VuV¦4#±§¯Rª B³
V~°V¡¯Vºu[~ V¦4be#¦¨I§¢§R9²~¦b¦[R~RReB³^¨EºB¡¯®R4R¨¦[©hbb¦[¡¢~ºk¼>²~4²V¨I§¢§»g4~#¦4©½¡¢c¨EºB¡¯®R['µ
¼>²~4²V¨I§¢§»§¢B~ºH½ £
«
¿ ~#±®¡¢B²~e4B§¢²)[¡¢B¡¢e[~³B§¢§¢!¬¡¢~º)Ê`¨44²~ª¡¢~ºE[V¨e[~48¨¦4hb4¦[¡¢~ºV¨I=§¢R~º#[
¬=rRBªk¨¦[¡¯©¨N¦©¨I9['¦4¬¡¢b¬
¡¯[S[~WR§¯RªRs4
B³[~['µ £ >³¨cª¡¯4ª¨[©Ym¡¢
³B²~~°S³#¦4BªER§¢9ªRs8«)¬=El[#F¨I~°S~'µRBªk1,
¨¦[2,
[...,
~Em
48¨N¦[©Fbb¦[¡¢~ºg¬¡[h[~ER§¯RªRs4
B³~[~=['µR«H¨I~°g4B £ 9[B³
9BVbRR²)[¡¯®R§¢Rª9s[
2, 3, . . . , m + 1
m
i, i + 1, . . . , i + m − 1
¡¢c[~[µ¨N¦[uR¨I§¢§¢R°h¨;=*0+(~3B; £
¿ ~¡¢¨I§¢ºB#¦4¡¯[~ª ¡¢³_¨Ib
¨I§¢B~ºg¨I=[~48¨¦[©Ybb¦[¡¢~ºW¡¯4~#¦4R«±²)¡¯ª¨R»±yRRBª¡¢~ rÅ
R¡¢9s³#¦§¢B~º48¨N¦[©Fbb¦[¡¢~ºB·¼>4R µ)'¦[R¡¢4rÈ ½ £¿ ~9¦[¡¢¨kª#¦[E4#V~¡¢b[¡¯8¨[R°¨§¢ºB#¦[¡¯[~ª
¼,[~
·+yA.1@?)U J3B7878*,MRU =79&H1@1d&HO -)3B78*>1@?Dj½[V¨
¡¯¨§¯¬¨R»³_¨Ib £
R¤~
¿ ~=³B§¢§¢!¬¡¯Vº ¦4Bº#¦©¨Iª ¡¢ªkV§¢Rª9s[2[~e#±®¡¢B²~`¨I§¢ºB#¦[¡[~ª £ ,ª¨¡¢s©¨¡¢~2¬=¨¦4¦[¨8»
B³©V¨¦©¨9[9¦[9«{B~r³#¦u[~r48¨¦4b4¦[¡¢~º)«^¨I~°B~r³#¦u4VrR²)¦4¦[9s¬¡¢~°~N¬ £ r¡¢ªkyBb·¨
9»R§¢¡¢#¦[°~9¦BF4V·¬
¡¢~°V!¬w¼,4V ~¦[bR§¯RªRs°~¡¯¦4R9[§¯»³B§¢§¢!¬[~§¨IbB~!½^[~¡¢ª¨¹9
¡¯8¨b»[4~¡¢³¢[~k¬¡¢~°~!¬ B~§¢¨IR#«`±»/b¡¢ªkV§¯»F¦49V§¨IR¡¢~ºYR§¯RªRs B³=[~4'µ¬¡[
R§¢9ªRs
¼@¨I~°¨
4Vu[¨Iª[¡¢ª¨I°)®I¨I~R¡¢~ºW[~E§¯BºB¡¢8¨I&
§ ~¦[byB4¡¯4i¡¢BhB³[~¬¡¢~°~N¬
±»cB~!½ £ i + m
# include < iostream >
// Program : string_matching. C
// find the first occurrence of a fixed string within the
// input text , and output the text so far
int main ()
{
// search string
char s [] = " bool ";
// determine search string length m
unsigned int m = 0;
for ( char * p = s ; * p != ’\0 ’ ; ++ p ) ++ m;
// cyclic text window of size m
char * t = new char [m ];
unsigned int w = 0; // number of characters read so far
unsigned int i = 0; // index where t logically starts
// find pattern in the text being read from std :: cin
std :: cin > > std :: noskipws ; // don ’t skip whitespaces!
for ( unsigned int j = 0; j < m ;)
// compare search string with window at j - th element
if ( w < m || s[j ] != t [( i+j )% m ])
// input text still too short , or mismatch :
// advance window by replacing first character
if ( std :: cin > > t[ i ]) {
std :: cout < < t[i ];
++ w ;
// one more character read
j = 0;
// restart with first characters
i = ( i +1)% m ; // of string and window
} else break ;
// no more characters in the input
else ++ j ; // match : go to next character
std :: cout < < "\ n";
`©
R¤H
delete [] t;
return 0;
}
Program 15:
]27939-M^MR1>78*0+.- DF&H14\8?*0+.-mt
«[~~¦[Bº#¦©¨Iª
9J¬=h¨~V§¯»j4V~¦[Bº#¦©¨Iª [S[~['µWB³
[~ V§¢
V
eratosthenes.C
B²)4V²)[ `¦[Bº#¦©¨ª 8" ²)[W4V ~¦[bR9²~¦b¦[R~RdB³^[~ul4¦[¡¢~º
Ê
"bool"
// Program : eratosthenes. C
// Calculate prime numbers in {2 ,... ,999} using
// Eratosthenes ’ sieve .
# include < iostream >
int main ()
{
// definition and initialization : provides us with
// Booleans crossed_out [0] ,... , crossed_out [999]
bool
à ³9¬ RBªªRH[E~RR°<4±.cª¨°Vk¬
¡¯[/¦[Rb.R9[[~cV¨I~°~§¢¡¢~ºYB³b©¨I~°V¨¦[°Æ¡¢)V²)
9¦[ £ ¿ V~¦[Bº#¦©¨Iª ¦[R¨I°~c[~['µh©V¨¦©¨I'[9¦h±s»QV¨¦[¨I9[9¦
³¢¦[Bª
~
«²VH[¡¢§[~¡¢
std::cin
b4¦48¨Iª ±y9RBªR bRªk~» £¿ E[Rbe[~¡¢9«s¬=²~4[~³_¨I'e[V¨eb4¦48¨Iª ®I¨I§¢²~Re8¨c¡¯ªk§¯¡¢R¡¯[§»
±ycRBs®'¦4[R°5[
«¬
¡¯[4V¦[Rb²V§W±y9¡¢~º % Y¨IW§¯BVºF¨Ir[~9¦[
¬¨W~j¨N4[Rªk~W¨
¦[8¨°V¡¯Vºr¨Ib
4Vubool
R~°B³p[~dbb¦[8¨Iª £ ¡¯V9u[~u®I¨I§¢²~uB³
¡¯[~dl4¦[8¨Iª
std::cin >> t[i]
&©ZR14%97·¦[Rª!®#¨I§)B³B~©V¨¦©¨I'[9¦8«[~9Bs®9¦[b¡¢Bg[
µ~¨I94§¯»·[R§¢§¯²~¬~9[~9¦[~9¦[b[¡¯§¢§
bool
¬¨I¨r©V¨¦©¨9[9¦¡¢h[~b4¦[R¨IªY«#¦V# £
hBb9Bs®R~¡¢RH[§¯»«B[~=V¦4Bº#¦©¨Iª¶¡¢¦[²~g±»¦[9°V¡¦[R9[¡¯Vºb©¨V°V¨¦4°k¡¢)V²~`4E¨ §¯9Bs©¨I¡¯)Å
¡¢~º·[~['µ £ >c[~¡¢e8¨Ib#«[~b4¦[8¨ª
¬¡¯§¢§±y9RBªRªk~»k'µ)¨I9[§¯»c¨Ne[~9V°
B³
std::cin
[~ §¯ £¿ ~d§¯¡¢~
std :: cin > > std :: noskipws ; // don ’t skip whitespaces!
¢¡ ~RR94[¨¦4» [[9§¢§
[~Yb4¦48¨Iª [V¨;?*>14%RMl].&~\9%RM5¼,±V§¨I)¹R«~9¬§¯¡¢~RR«=9[ £ ½ 4~B²~§¢°Q~#
±yS¡¢ºB~#¦[R° ¼,±»Q°~R³_¨I²~§¯R«[~9»¨¦[8½ £¿ ~¡¢c¨I§¯§¢N¬
²~c[Æ48¨N¦[©¾³#¦hl4¦[¡¢~ºB[V¨cRBs[¨I¡¢
¬~¡¯4Rb¨IRR9«)¨I~°¡¯¨I§¢§¢!¬²~[B²~b²)4V4'µ¼>²)c[·[~ ~¦[b=9R²)¦4¦[R~RB³y[~48¨¦4
b4¦4¡¢~ºH½e¡¯h¡¯[#¦[¡¢ºB¡¯¨§.§¨R»B²) £
2.6.11 Multidimensional arrays
>ÁÂu·«~¬=u8¨V¨8®d¨¦4¦©¨R»B³`¨N¦4¦©¨R» £ ´)#¦
µ~¨IªkV§¢#«s[~u°~RR§¢¨¦©¨[¡¯B
int a [2][3]
° RR§¨N¦[R [±y¨I¨¦4¦[¨8»B³§¯R~º#[ ¬
VBbR§¯RªRs4p¨¦4¨¦4¦[¨8»pB³§¯R~º#[ ¬¡¯[d²V~°~9¦[§»¡¢~º
~
a
2
»y
¡¢¨
DhA.OX1>*l(*0D%R+2M'*b3B+&HO&7879&:J¼>¡¢[~¡¢8¨I34rB³°~¡¢ª9Vb¡¢B~
£ W¨I§¢bc4¨8»[V¨
¨I~° int½ £¿ ~u»syuB³ ¡¢ a
«~¨V°
[~d²~~°V'¦[§¯»¡¯Vº·».d¡¢
£ >hºBR~9¦©¨I§>«
2
3
a
int[2][3] int[3]
[~°V9R§¨¦©¨N[¡¢B
R¤"
"!$#&% ' £¯£¯£ "!$#&% '
°~V~R¨I ¨¦b¦©¨R»
B³§¢9Vº#4
¼0®#¨I§¯²V
B³ "!$#&% s½¬
VBbR§¢Rª9s[W¨¦[Y¨N¦4¦©¨R»WB³§¢R~º#[
a
n1
¼,®I¨I§¢²~cB³ "!#&% ½E¬~B4cR§¢Rª9s[r¨¦[ £R£8£ »B²JºB9r[~¡¯9[²)¦[ £Æ¿ V®I¨I§¢²~R
n2
n1 , . . . , nk
¨¦[c8¨I§¯§¢R°4V/(*,DF%R+2M9*b3B+2MYB³[~h¨¦b¦©¨R»«¨I~°<[~c'µ~¦[944¡¢B~ !$#&% I« £9£8£ « "!#&%¾ª
r²~b±y
RB~b©¨s'µ~¦[Rb4¡¢B~B³p¡¢s[9º#¦©¨I§.»yd¨I~°
yBb¡¯[¡¯®®I¨I§¢²~ £
¨I~°~Bª ¨RRR4·¡¯jªW²~§¯4¡¢°~¡¢ªR~4¡¢BV¨I§{¨¦4¦©¨R»d¬=#¦4¹E¨Id'µyR94R°2Ê a[i] ¡¢u4VWR§¢Rª9s
B³¡¢~°~'µ «y¨I~°[~¡¢R§¢9ªRs¡¯¨IS¨¦4¦©¨R»Y¡¯44R§¢³ £ ÁeB~4R¸²~RH[§¯»«
¡¢4V·9§¢RªRHB³
i
a[i][j]
¡¢~°~'µ ¡¢
[~u¨¦4¦©¨R»
«V¨I~°bgB £
à §¯[j~B²~ºBE¬=e²~4²V¨Ia[i]
§¢§¯»[~¡¢)¹EB³~ªr²~§¯[¡¢°~¡¢ªR~4¡¯B¨N§#¨¦b¦©¨R»¨I©¨N±§¯R#¦ª¨4¦4¡¢RRR«N[~ªRªgÅ
#¦4»/§¨R»B²)¡¢ ¨ §¢¡¹³#¦gB~'Å>°V¡¯ªR~4¡¢BV¨I§¨¦4¦©¨R» £ ´)#¦Wµ~¨IªkV§¢#«4V¬=°~¡¢ª9Vb¡¢BV¨I§
¨¦4¦[¨8»Æ°~RR§¢¨¦[R°<4~¦4 B²VºB
9R²)¡¯Rg¨RBH[¡¢ºB²~B²~r¨¦4rB³
4V
ªRª#¦4»«`¬
¡¯[
b¨IRu³#¦
#±ÄR'int
[B³{a[2][3]
»sy
«~4Rd´p¡¢ºB²)¦[ £
6=2
3
a[0][0]
int
a[0][1]
a[0][2]
a[1][0]
a[0]
Figure 10:
a[1][1]
a[1][2]
a[1]
J%RDF3B78:SO_&:V3BA.13[Zk&Y1>;3I(*,DF%R+2M9*l3B+&HO&7879&:
h²~§¯[¡¢°~¡¢ªR~4¡¯B¨§¨¦4¦[¨8»8¨I±y
¡¢~¡¯[¡¨I§¯¡
RR°¡¢¨u¬¨R»W4¡¢ª¡¢§¢¨¦`[EB~R°~¡¢ªR~4¡¯B¨§~¨¦4¦©¨R» [~®#¨I§¯²V³#¦
4V:e7!MR1u¼@¨I~°3B+2OP:Y[~ ~¦[l½=°~¡¢ª9Vb¡¢Bª¨8»±.uBª¡¯b[R°2Ê
int a [][3] = { {2 ,4 ,6} , {1 ,3 ,5} };
¬~9¦[
¡¯²~49°h[r¡¢~¡¯[¡¨I§¯¡
R4VR§¯RªRs
¿ V¡¯°~V~R¨I¨N¦4¦©¨R»B³{».
int[2][3]
{2,4,6}
«V¨I~°
¡¢=²~4R°Y³#¦
£
a[0]
{1,3,5}
a[1]
¿ ~W¦[R¸s²~¡¯¦[R°°~¡¢ªR~4¡¯BVB³¨
ªr²V§[¡¢°~¡¢ªRÅ
4¡¢BV¨I§¨¦4¦©¨R»·ª¨R»dV#`±.¹~N¬
g¨N`RBªkV¡¢§¢[¡¢ª¡¯¬
~¡¢©rR¨I4=°)»V¨Iª¡¢¨I§¢§¢s8¨[¡¢Bd¡¢8¨I§¯§¢R°
³#¦ £ É29²~l©¨¦4¬
¡¯[[~ER¨I4E¬~9¦4·¨I§¢§{°V¡¯ªR~4¡¢B~±V²)
4V ~¦[l¨¦[d¹~N¬
F¨NRBªkV¡¢§¢
[¡¢ª £ >³ "!#&%
V¨I®#¨§¢²~
«p¨cyB¡¯s[9¦[Y¨°)»V¨Iª¡¢R¨I§¢§¯»¨§¢§¢R¨[R°F¨¦4¦©¨R»FB³e§¢R~º#[
n
¬¡[h²~~°~9¦[§¯»¡¢~º»sy n ' ££¯£ 0 '^¡¢#±V[¨I¡¢~R°c³¢¦[Bª ¨
'µV¦4R44¡¢B
Dynamic allocation of multidimensional arrays.
new
n2
"!#*%' "!$#&% ' £¯£¯£ !$#&% '
nk
new
¬~9¦4 "!$#&%
¨d®#¨§¢²~
«
£ à §¯§°~¡¢ªR~4¡¯BV±V²)E[~~¦[bdªW²~bu±ykRB~b©¨s
ni i = 1, . . . , k
'µV¦4R44¡¢B~ £ >³»B²S[~¡¢)¹¨±yB²)¡³#¦d¨ª¡¢s²)[#«4V¡¯¡¢~#4²)¦4~¦[¡¢4¡¢~º £ ´)#¦'µ~¨IªkV§¢I«.¡¢
#¦[°~9¦2[ºBR~9¦©¨4ª¨I©~¡¢~`§¨I~ºB²V¨IºB9°~³#¦^¦©¨I~°~Bª ¨IR9R4p#.9¦©¨[¡¯BVCBd[~°~»V¨Iª¡¢8¨I§¯§¯»
¨I§¢§¯8¨4R°¨¦4¦©¨R»«H[~RBªkV¡¢§¢9¦ªW²~b¹~N¬~N¬ª¨Is»gªRª#¦4»rRR§¢§¯e¨E4¡¢~ºB§¢9§¢RªRHB³y[~
²~~°V'¦[§¯»¡¯Vº·». ' £¯££ '^R9²~V¡¢9¼,4Rd R9[¡¢B £ È £¥" ½ £ ²~=[~¡¢=¡¢=B~§¯»k.B44¡¯±V§¢¡¢³2[~
n2 nk
®I¨I§¢²~R
« £R£8£ «
¨¦[
¹~!¬Y¨N
RBªkV¡¢§¯
[¡¢ª £
n2
nk
`©
R¤B¤
> ³¬=h¬¨IHk[/²~4[~¨±y!®
µ~¦[R4b¡¢BQ4Æ¡¯V¡[¡¨I§¢¡ Rc¨FyB¡¢H[9¦
new
®I¨¦[¡¨±V§¢¼0¬¡¯[Y[~r¨I°~°)¦[R4B³[~~¦[b9§¢RªRHB³[~ªW²~§¯4¡¢°~¡¢ªR~4¡¢BV¨I§y¨N¦4¦©¨R»~½'«.¬=r~RR°
[~
»sy lyB¡¢H[9¦r[ ' £¯££ ' £ à r»B² ª¨8»Æ4²~b.R98«¬=¡¯V³#¦4ª¨I§¢§¯»8¨I§¢§=[~¡¢W»sy
n
n ' £¯££ ' «y±V²)¬=8¨2^Ç ¬
¦[k¡¯4·¡¯§¢¡¯¹·[V¨¡¢jÁ·«{4¡¯V9 ' ££¯£ '¡¢~#u¨»sy
n2 nk V¨Iª £ à º¨I¡¢2«~¬=·V¨8®E4k¦[R4#¦4
[¨I¡¢~°~¡¯¦[R9
°~ VV¡[¡¢BB³`[~·°~nR42¡¯¦4R°Ynyk B¡¢s49¦
®I¨¦[¡¨N±§¯
«V¨I¡¢h[~³B§¢§¢!¬¡¢~º·Rs°V³¢¦©¨IºBª9s £
Pointers to arrays.
p
int n = 2;
int (* p )[3] = new int [ n ][3];
// type of * p : int [3] <= > p : int [3]*
¼,¬
~¡¢©u¡¢2[~[¨Iª¨I
½
¿ ~¨¦[RH[~R4Rp¨¦[V9RR4[¨N¦4»d~9¦4#«I4¡¯V9
int *p[3]
int* p[3]
°~RR§¨N¦[R
[±yW¨Ij¨N¦4¦©¨R»SB³yB¡¯s[9¦44
¼>49g¨I§¯4VµC¨N¦©¨Iº#¦©¨V½ £ Á b»H©¨NµS¡¢
int
±V¡¯4['¦[b¬=Rp9 £
>³»B²2Ç ¦[¨b¹¡¢~º
³#¦¨hªr²V§[¡¢°~¡¢ªR~4¡¢BV¨N§p¨¦b¦©¨R»¬¡[j~BÅ@RB~b©¨sE°~¡Å
ªR~4¡¢B~e¨ªBVº
«[~ gR¡¨I§y¨Vl¬=9¦=¡¢RÊ[~9¦4¡¯eVB~ £ ²)=²~~°V'¦e[~RB²~s[9¦R«
2 , . . . , nk
»B²8¨h±V²~»h¨E®9¦4n»
ºBs°¡¢ª¡¯©¨N[¡¢B £
~ ~¦[br4B§¢²)[¡¢B[V¨b²VºBºB9b[r¡¯[4R§¯³=¬
~R»B²Æ¦[RRB~4¡¢°~9¦[~ ¨ªRª#¦4»§¨R»B²)
B³ªr²~§¯[¡¢°~¡¢ª9Vb¡¢BV¨I§2¨¦4¦©¨R»u¡¢[~¡¢9Ê»B²j°)»V¨Iª¡¢8¨§¢§¯»h¨I§¢§¢s8¨[¨B~R°~¡¢ªR~4¡¢BV¨I§p¨¦4¦©¨R»SB³
§¢R~º#[
¨I~°¨¦44¡ VR¡¨I§¢§»g¨¦4[¡[¡¢Bh¡
¡¢H[gb²~±¨¦b¦©¨R»
±s»h°~B¡¢~ºgbBª
nk
n = n 1 n2 IJ~ºBºB§¢¡¢~º·¬¡¯[c¡¢~°~¡¢RR £
É^'e²~e°V¡¯4R²~4[~
¬=°~¡¢ª9Vb¡¢BV¨I§)8¨I4B~§¯»r[¨R®B¡¢°§¢R~º#[H»g³#¦4ªW²~§¨I £ à ¬=°~¡¢ªRÅ
¨I~°
8¨Ij±yg4¡¢ªr²V§¢¨[R°S±»¨hB~R°~¡¢ªR~4¡¢BV¨I§`¨N¦4¦©¨R»jB³
4¡¢BV¨I§¨¦4¦[¨8»S¬¡[j°~¡¢ªR~4¡¢B~
n
m
§¢R~º#[
¨I~°
£¿ ~9§¢RªRH¬¡[§¢BºB¡¢8¨§V¡¯V°~¡¢9R
nm
. . . , n − 1}
j {0, 1, . . . , m − 1}
¨~y8¨N¦[
¨N
¡¢~°~'µ
¡¢
[~B~R°~¡¢ªR~4¡¢BV¨Ii §y¨N¦4{0,
¦©¨R» 1,
£ ¡¢R®9¦[[¨s«V[~R§¢Rª9sB³¡¢~°~'µ
mi + j
`
¡¢c[~B~R°~¡¢ª9Vb¡¢BV¨I§.¨¦b¦©¨R»¨§¯BºB¡¢8¨I§.¡¯V°~¡¢9R
°~¡¯®
¨I~°
ªs°
£¿ ~¡¢e¬=#¦4¹
i=`
m
j=`
m
±yRR¨I²~4u[~³²~V'[¡¢B
Arrays of pointers.
(i, j) → mi + j
±V¡¥ÄR9[¡®R§¯»
ª¨V[~E4'B³§¢BºB¡¢8¨I§2¡¢~°~¡¢R9
[g[~Eb9B³²~ªr±.9¦[
£
(i, j)
{0, 1, . . . , nm − 1}
>s4²V¡[¡¯®R§¯»«![~¡¢{ª¨~¡¯Vº ¨4[9V{[~¡¢ª¨IºB¡¢V¨¦b»©¨±V§¢B³ ¦4N¬
`¨I~°
RB§¢²~ª~^±s»·4¡¢ªkV§¯»
V²)4[¡¢~ºjB~h¦[!¬¨³¢[9¦¨I~#[~9¦ £ à g»B²Q8¨I 49Y³¢¦[Bª n´p¡¢ºB²)¦[ «=m
4V¡¯g¡¢kµ~¨I94§¯»<¬
¨N
[~rRBªkV¡¢§¢9¦¡¯u¡¢ªkV§¢¡¯R¡¯[§¯»c°~B¡¢~º³#¦Eªr²~§¯[¡¢°~¡¢ªR~4¡¯B¨N§2¨¦4¦©¨R»u¬¡[Q\'3B+2MR1b&+21·°~¡¢ªR~4¡¢B~
£
n1 , . . . , n k
B¡¢~º¡¯'µ§¯¡¢R¡¯[§»
³#¦~BÅ@RB~b[¨Is°~¡¢ª9Vb¡¢B~
¡¢B~§¯»Y¨W¬=#¦4¹I¨¦[B²~~°^«[~B²VºB2«.b¡¢~R
^ª#¦[R!®9¦8«y[~¡¢¬=#¦4¹I¨¦[B²~~°F±yR9BªR9®Rjª#¦[
¬=r§¢B4·[~W¡¯s[²~¡¯[¡®E~#©¨[¡¢B
R²~ª±y9¦[4Bª¬
¡¯[
V¡¯ºBV'¦[°~¡¢ªR~a[i][j]
4¡¢BV¨I§¨¦4¦©¨R» £
à ±y9449¦4B§¢²)[¡¢B[V¨¹R9V[~Y~#©¨[¡¢B
¨V° [V¨bª#[~§¯»Æ'µ[R~°~k[
a[i][j]
~¡¢ºB~9¦°~¡¢ª9Vb¡¢B~¡¯
[~d³B§¢§¯N¬
¡¢~º
¼@¨º¨I¡¢2«)¬=EB~§¯»h°~¡¢bR²~4
[~E8¨4EB³¨W¬=°~¡¢ª9Vb¡¢BV¨I§
¨¦4¦[¨8»¬
¡¯[°~¡¢ª9Vb¡¢B~
¨I~°
½'Ê»B² V¦4bd°)»¨ª¡¢8¨I§¢§»Y¨I§¢§¯8¨4·BVg¨¦4¦©¨R»SB³
].3B*,+21@U
n
m
n
%R7!MR«¨I~°/[~R»B²§¢99®9¦b»<4¡¯VºB§¯gyB¡¢H[9¦·yB¡¢H·[Y[~ V¦4brR§¢RªRH·B³¨I<¡¢~°~¡¯®¡¢°~²¨§>«
°)»V¨Iª¡¢R¨I§¢§¯»/¨§¢§¢R¨[R°5¨N¦4¦©¨R»JB³§¢9Vº#4
£¿ Vh³B§¢§¢!¬¡¢~º9°~³¢¦©¨IºBª9sW°V9ªBVl4¦©¨[9
m
[~¡¢ £
R¤
// a points to the first element of an array of n pointers to int
int ** a = new int *[ n ];
for ( int i = 0; i < n ; ++ i)
// a[ i ] points to the first element of an array of m int ’s
a [i ] = new int [m ];
¡¢ l.B¡¢s['¦[uyB¡¢s49¦4
¡¢[~9¦[R³#¦[¨yB¡¢H[9¦[
¼>49
¿ ~
»sy
£
int**
[~¨¦[¨Iº#¦©¨Vk
Bg.B¡¢s['¦4²)±V49¦4¡¯~[¡¢~ºd¡¢ R9int
[¡¢B £a[i]
È £ ½'«H¨I~°
¡¢¨I§®#¨I§¯²Vint
B³C».
a[i][j]
«Ä²~b§¢¡¯¹¡¢h¨ l¦[9ºB²V§¢¨¦ ¬=s°~¡¢ªR~4¡¢BV¨I§C¨¦4¦©¨R» £
int
¿ ~ªRª#¦b»F§¢¨8»B²)·¡¯E°~¡ 9¦4Rs8«{[~B²VºB2Êr´p¡¢ºB²)¦[ ¡¯d¦[9V§¨I9R°±»/´p¡¯ºB²~¦4 B#£Y¿ V¡¯
ª8¨I~R«[~¬=s°V¡¯ªR~4¡¢BV¨I§{¨¦4¦©¨R»¡¢¨[©~R°F²~³¢¦[Bª ¨49B³
BV9°V¡¯ªR~4¡¢BV¨I§{¨¦4¦©¨R»9«
n
±V²)d[~R4
¨¦b¦©¨R»·¨¦4k~#E~RRRb[¨¦[¡¢§»jRB~4R9²~4¡¯®R§¯»¨¦4¦©¨VºB9°Æ¡¯ªRª#¦4» £ >/³_¨I9R«p[~
¨¦4¦©¨R»ªn¨R»h9®9FV¨R®E°~¡ '¦[Rs§¢R~º#[~ £¿ ~¡¢¡¢²~4R³²~§³#¦µ~¨IªkV§¢¬~RY»B²Y¬¨Is[
n
b[#¦4g¨§¢!¬=9¦bÅ,4¦[¡¨I~ºB²~§¨¦
ª¨4¦[¡Xµ y¡¢[~¡¢8¨I4I«^¡ub² gRRu¡¢³4V·¦[!¬B³¡¯V°~'µ
V¨I§¢R~º#[
i
£
i+1
a[0]
Figure 11:
a[1]
a[1][0] a[1][1] a[1][2]
a[0][0] a[0][1] a[0][2]
J%RD3B78:kO_&:V3BA.1e3[Zd&W1>;3I(*,DF%R+2M9*l3B+&HO{&7879&:k79%'&HOP*s%(hT8:c&+Æ&7879&:h3[Z]y3B*0+214%R7!M
É^'=²Ve9BV9§¢²~°V4V¡¯e4R9[¡¯Bc¬
¡¯[c¨Ic¡¢s['¦[Rb[¡¯Vº¨NVV§¢¡¯8¨[¡¢BgB³
>¼ ªr²~§¯[¡¢°~¡¢ªR~4¡¯B¨N§_½¨¦4¦[¨8» £ >ª¨IºB¡¢~·¨¦[R9©¨VºB²~§¨N¦³_¨I9[#¦4» V#¦R«^b²~±.°V¡®¡¢°~R°F¡¢s[c4¸s²¨N¦[
RR§¯§¢ £ BªB³^4VR9§¢§¢=¨¦[±V§¢s©¹9°
¬¡[#±l©¨IR§¢9¼,[~R4RB²~§¢°
³#¦µ~¨IªkV§¢
±.ª¨~¡¢~R
#¦R²)~±y¨¦[°~R«±V²)·§¢'²V¨N±l4¦©¨I94§¯»j8¨§¢§[~Rª l¬¨I§¢§¢ ½ £ à ¦[#±y#E¡¢E¡¢~¡¯[¡¢¨I§¢§¯»§¢s8¨[9°¨N
4Bªk9R§¢§
¼,[~4B²)¦[R8½'«¨I~°/4VºB¨I§¡¢E[ª!®g[~ k¦[#±y#E4SbBªk#[~9¦RR§¯§
¼,[~
S
T
©¨¦4ºB9½ £ à ·¨IH»[¡¯ª#«^4Vr¦[#±y#d8¨I/ª¨¹gB~Wb[9Ƴ¢¦[Bª ¡[dR²)¦4¦4Rs·9R§¢§4Y¨Is»B³[~
³B²)¦¨°Äl¨I9RsRR§¢§¯R«)±²)³#¦#±s®¡¢B²~e¦[8¨4B~
¡¯ª¨R»B~§¯»²~4dR9§¢§¢e[V¨
¨¦[Rªk~» £
¡¯®9
[~¡¢e4'[²){«¬=¬¨IHe[ ~°
¨·4~#¦4[Rb=yBb4¡¯±V§¢
¦[#±.#eC¨N[
³¢¦4Bª
[
¼>#¦ ~°
S
T
B²)[V¨~
4²~©F¨4'µ¡¢b[©½ £ (
9¦4#«y[~r§¯R~º#[FB³¨k¦[#±y#¨[F¡¢[~²~ª±y9¦B³b[9V
©¨¹9F±»[~¦[#±y#°~²)¦[¡¢~º¡¯[ª#[¡¢B³¢¦[Bª
[
¼,[~¡¢~¡¯[¡¢¨I§pR9§¢§ °~9u~#RB²~s ^¡¢
S
T
¨¦4[¡¯R²~§¨¦8«¡¯©¨¹9
b49V4¦48¨I©
³¢¦[Bª
½ £ ´p¡¢ºB²)¦[ ! ¼>§¢R³¢©½
4~NS¬
u¨F'µ)¨IªkV§¢d¬
¡¯[
0
S
S
RR§¢§¢ £
8 12
>[~¡¢
µ~¨IªkV§¢#«~¨r§¢¡¯44§¢[~¡¢)¹¡¢~º¦[9®8¨§¢
[V¨[~9¦[d¨¦[ERb4Rs4¡¨I§¢§¯»¬=k°~¡ 9¦[RH
yBÅ
4¡¯±V¡¢§¯¡¯[¡¢R³#¦
[~u¦4#±y#4W¦[8¨ Ê¡¯8¨I¨I4±yR§¢!¬L[~d9BªkyB~RsB³p¬¨I§¯§¢¨I°BÄb¨RRs[
«.#¦¨±y!® £ ,4²~¦4VB²)[V¨
CT¨44¡¢~º¨±y!®·¡¢³_¨b[9¦8«2¨V°F¨W¦[94²~§¯[¡¢~º4~#¦4[9b¨[/¼>B³
S
§¢R~º#[
½¡¢d°~9V¡¢94R°j¡¢´{¡¢ºB²)¦[ ! ¼,¦[¡¢ºBH½ £ #[[V¨u¡¢ºBR~9¦[¨I§4V'¦[g¡¢~#E¨c²~V¡¯¸²~
21
4~#¦4[9b
¨4 £ >gB²)¦'µ~¨IªkV§¢I«#[~ VV¨I§¦[¡¯ºBs`[²)¦[WB³[~e¨[g9B²V§¯°k¨I§¢bV¨R®=±yRRkª¨°V
B~u#¦¬=gR9§¢§¢=³²)¦4[~9¦°~!¬ £
Computing shortest paths.
`©
R¤ È
S Figure 12: E
"!"! "!
"!! "!! "!!
"""
T
A B
A BA
B
A B
A BA
B
AD
BA
B
C BADC
DC
C DC
DC
D
C DC
DCD
- .
- &
% .- &
% &
% &% $
# $
# $#
.
- .
- &
% .- &
% &
% &% $
# $
# $#
.
- &
% .- &
% &
% &% '
.-.
$#('
$#('$#(
'
'
')(
(
)
)(
*
'
'(
S (
) *
) *'(*)
*
*
)) ,
)) ,+*))
+*
+*
,
*
+ *
+ *,+
,
++ ,
++ ,++
,
,
,
/ ,
/ ,0/
0
/ 0
/ 0/
0
0
/
10 /
10 /210
2
1 2
1 21
2
1 2
1 21
2
2
%>ZR1GFYj?C&H1
*>Mk&MR?.3B7!14%8MR1
793TR31]C&H1@?gZ97R3BD
S
143
TH
; <
; >
= <; >
= >
= >= @
? @
? @?
<
; <
; >
= <; >
= >
= >= @
? @
? @?
<
;:
== <;:9; >
== >
== >== @
?? @
?? @??
<;:9
<
>
9<
;
<;
>
<
>
>
>
@
@@
9 :
9 :9
:
9
9
:9
:
:
98
:9
7 :
7 :987
8
7 87
87
8
7
8657
86
5 7865
5 65
65
6
T
54
6543
3 6543
6
3
3
34
4
4
3
43
434
$*0-B?)1GFhx?*>M3B+`%JI
[ V¨~°~¨k4~#¦4[Rl¦[#±y#¨[2«.ºB¡¯®9S[~°~¡¢ªR~4¡¢B~
¼,²~ªr±.9¦B³¦4N¬
©½E¨I~°
¼>²~ª±y9¦B³RB§¢²~ª~©½B³[~³_¨I9[#¦b» Vs#¦8«[~R#¦[°~¡¢V¨4R
n
B³4B²)¦[Rr¨I~°©¨¦[ºB9R«y¨I~°Sm
4VE¬¨§¢§¢ £ (N¬8¨I[~¡¢±y·°~B~!Î R³#¦[·¦[8¨°V¡¯Vº³²)¦44V'¦8«.¬=
R~RB²)¦©¨IºB»B²[E[~¡¢)¹k¨±yB²)[~¡¢~¦[#±V§¢9ª ³#¦¨d¬~¡¢§¯ £ §¢8¨I4~#[[V¨[~gT878AC14%8UZ3B7R\9%
&8])]27R3I&~\R?QB³=4¦4»¡¢~º¨I§¢§.B44¡¯±V§¢g¨4V¨V°Æ4R§¯R9[¡¢~º[~4~#¦4[9bB~c¡¯·V#r¨#~[¡¢B2«
4¡¢~Re[~es²Vª±y9¦B³V4²~©W¨[~¡¢`4¡¯ªk§»u[s§¨¦[ºB=¨I§¦[8¨I°)»E³#¦ªs°V'¦©¨[ Vs#¦°V¡¯ªR~4¡¢B~ £
¼ Rb¡¢°~RR«~~N¬ °~W»B²'®RYºBR~9¦©¨4d¨I§¯§.[~R4u¨4V[ν
(
9¦[Y¡¯¨I¨~V¦4¨I© ±¨IbR°B6(:H+&Dh*l\]27R39-B79&D
Dh*0+.- £ ¿ ~¡¢kºB9V'¦©¨I§
[9~~¡¢¸s²Vh¡¢
¨~V§¢¡¢8¨N±§¯W[Y~¦[#±V§¢Rª¬~B44B§¢²)[¡¯BVd8¨IƸ²~¡¢[¹§¯»±y#±~©¨I¡¢~R°/³¢¦[Bª [~4B§¢²)[¡¯BV[
4ª¨I§¯§¢9¦=4²)±~~¦[#±V§¢Rª=B³p[~[¨Iªb4¦[²~9[²)¦[ £¿ Vd¨¦4¡¢°)»V¨Iª¡¯V¦4Bº#¦©¨Iªª¡¢~ºE¡¢=[
V~°
[~ l¦[¡¢ºBH 4²)±~~¦[#±V§¢RªR«s¨I~°[~¡¢ª¨R»r¦[R¸²~¡¯¦4¨dª#¦[#¦e§¯R4e³_¨¦bÅ,¦[8¨I©~¡¢~ººBR~9¦©¨I§¯
¡ 8¨[¡¯B
B³{4Vu#¦[¡¢ºB ¡¢V¨I§V¦4#±§¯Rª £
~R¬=h¨R®Y¡¢°~RH[¡ VR°Jb²V¡©¨±V§¢c4²)±V~¦[#±V§¢9ªR«¬=hbB§¯®Y¨I§¢§B³[~Rª ¡¯J[²)¦[2«e³¢¦[Bª
[~r4ª¨I§¢§¢'¦[
4Vr§¨¦4ºB9¦BV9R«p¨V°ªRª#¦[
¡ Ru[~W4B§¯²~4¡¢B~ £¿ V¨¬¨R»«y¬=WV¨R®k¨§¢§[~
¡¢~³#¦[ª¨4¡¢Bd[V¨`¬==~RR°W¡¢W#¦4°V'¦4¸s²~¡¢[¹§¯»·9Bªk²)[[~bB§¢²)[¡¢B·[¨ºB¡¯®Rr4²)±V~¦[#±V§¢9ª
³¢¦[Bª [~ubB§¢²)[¡¢B~=B³{[~r¼@¨I§¯¦[R¨I°)»4B§¯®R°½e4ª¨I§¢§¢'¦=4²)±V~¦[#±V§¢9ª £
>YB²)¦
8¨4#«~¬=dºBR~9¦©¨§¢
¡ R[~~¦[#±V§¢9ªÍ¨
³B§¢§¢!¬9ʳ#¦r&HO,O`Rªk~»cRR§¢§¯
B4V V#¦8«
C
RBªkV²)[=[~dO_%R+.-1@?YB³y¨4~#¦4[Rb¨[³¢¦[Bª
[
¼,¬
~9¦[4V®#¨§¢²~
¡¢
¡¢³.~Eb²V©¨[
'µ¡¢b[©½ £
9§¨I¡¢ª¶[V¨[~¡¢¨I§¢4u4B§¯®RB²)¦#¦[S¡¢ºB¡¢V¨IC§~¦[#±V§¢9ª B³.9Bªk²)[¡¯V∞º¨4~#¦4[Rb¨[
³¢¦[Bª
4 Ê Ã b4²~ª4¨Ne[~§¯R~º#[
B³p¨·4~#¦4[Rb=¨[
³¢¦[Bª
[
¡¢
¼>#[~9¦4¬
¡¢4
S
¬=d¹VS!¬ ¦[T¡¢ºBs
¨R¬¨R»h[V¨[~9¦[d¡¯
~k¨[¨¨I§¢§_½ £ ·¨I§¯4g[¨R»
[V¨T
¡¯`u<7R%∞
&~\8?C&)T!O_%³¢¦[Bª
T
¡¢ l[9V £
S
`
!¬ ¡¢³ T =K S «^[~9¦[kªr²~b±yk¨cRR§¢§¨I°BÄb¨RRsu[ T [V¨d¡¯u¦[8¨V¨±V§¢W³¢¦[Bª S ¡¯ ` − 1
b['9«.¨I~°¨I°BÄl¨IRRH[g4V¡¯¨W9R§¢§{¦48¨I©V¨±V§¢d¡¢
b[9V94 £ ´)B§¢§¯N¬
¡¢~ºrb²V©S¨g©V¨I¡¢YB³
2
RR§¯§¢²~H[¡¢§.¬=ºB94
ºB¡¯®9²~¨¨[hB³p§¢R~º#[ ` − ¬
~¡¢©h¡¢4~#¦4[RlyBb4¡¯±V§¢ £
S
`
É^'W²~·¦[9V)¦©¨Ib4VºBR~9¦[¨I§¢
¡ R9°Æ~¦[#±V§¢RªYʬ=¬¨Is·4S§¢¨±yR§e¨s»/Rªk~»RR§¯§
¬¡[
C
¨~BV~Rº¨N[¡¯®·¡¢H[RºB9¦¼,.B44¡¯±V§¯»
½4¨N¡¢~°V¡¯8¨[R4V·§¯R~º#[FB³¨k4~#¦4[9bC¨N[³¢¦[Bª
∞
[
(
'
[
¦
c
¨
[
¦
[
~
4
)
²
V
±
~
[
¦
#
V
±
¢
§
9
ª
d
[
Y¬~¡¢©/¬=V§¨/4S¦[9°V²~R[~¡¢9Êk³#¦W¨ºB¡¯®R<¡¯s[RºB'S¦
£
C
«2§¨N±yR§¨I§¢§4VR9§¢§¢[V¨u¨¦[¦[8¨I©V¨±V§¢³¢¦[Bª
¡¢¨ªBb b49V £ ´~#¦
·¬¨IH[¬
¦[¡¯4·¨g~¦[Bº#¦©¨Iª
i 0
S
i
i = nm − 1
R¤
@¼ ¨I'[²V¨I§¢§¯»«y³#¦d4BªWbª¨I§¢§¢9¦®I¨I§¢²~!½«^[~¡¢§¨±.R§¢¨I§¢§RR§¯§¢4¨NE¨¦4W¦[8¨V¨±V§¢r³¢¦[Bª
¨d¨I§¢§>«
S
4¡¢~Ru¨4~#¦4[Rb¨[h¬
¡¢§¢§.~9®'¦RH[9¦¨s»cRR§¢§y¬¡¯R £
(
9¦[¡¢y[~¦[R°~²~9[¡¢Bu³¢¦[Bª §¨¦[ºB9¦2[4ª¨I§¯§¢9¦y4²)±~~¦[#±V§¢RªRÊ2¨44²~ª[V¨2¬=V¨R®¨I§¯¦[8¨°~»
4B§¯®9°4Vd4²)±V~¦[#±V§¢9ª ³#¦
«C¡ £ £ ¬=·V¨8®d§¨±yR§¯R°Y¨I§¢§{RR§¢§¯[V¨¨¦[d¦[R¨I©¨N±§¯E³¢¦[Bª
−1
¬¡[~¡¢
#¦§¢94b[9V £ >iS
#¦[°~9¦[4B§®E[~·4²)±V~¦[#±V§¢9ª ³#¦ «C¬=·b[¡¢§¯§p~RR°[§¨±y9S§
[~RR§¢§¢ie−
[V1¨¨¦4¦[R¨I©¨N±§¯u¡¢ b['¼,±V²)
~#§¢Rb©½ £ ²~=[~¡¢¡¢=4i¡¢ªkV§¢I«4¡¢~R[~R4uRR§¢§¯
¨¦['µ)¨I9[§¯»[~²~V§¢¨±yR§¢9°
B~R
i¨I°BÄb¨RRs[WRR§¢§¢e¬
¡¯[h§¢¨±yR§
£
i−1
´p¡¢ºB²)¦[ 8" ¡¢§¢§¢²~b4¦[¨[R~N¬ [~g³¢¦4Bs[¡¢'¦EB³e§¨±.R§¢R°j9R§¢§¢º#¦[!¬d¡¯j[~¡¢u~¦[sRR4R«p³#¦
i=
£
0, 1, 2, 3
!"! "! "!
!!"!! "!! "!!
"""
0 S
EE FEE FEE
POPO POPO GGPOPO HGHG HGHG HGHG F
FIFE FIFE
POPO GPO HG HG HG F
FEJ
I
JIJJIJ
I
J
2 1 0 I
J
KK IJLKK IJLKK
L
L
LL
2 1 L
KN
MM LKNMM LKNMM
N
NN
2 N
MR
QQ NMRQQ NMRQQ
R
RR
QT
R
SS RQTSS RQTSS
T
S TTS TTS
T
T
.-.- .-.- .-.- &%&% &%&% $#$# &%&% $#$# $#$# $#$#
.-.- .- &% &% $#(' &% $#(' $#(' $#('
(')'( ('*)'( ('*)'( ('*)'(
1 0*
*)*) *)*) *)*) *)*)
1*
),+ *),+ *),+ *),+
+,+ +,+ +,+ +,+
,0/ ,0/ ,0/ ,0/
0/210/ 0/210/ 0/210/ 0/210/
2121 2121 2121 2121
21 21 21 21
<;<; <;<; <;<; >=>= >=>= ??>=>= @?@? @?@? @?@?
<;<;<;<; <;<; >=>= >=>= ??>=>= @?@? @?@? @?@?
:99: :99: :99:
:987:987 :987
876587876587 876587
6565 6565 6565
465344653446534
T
334334334
434343
i=0
i=1
ccdcc dcc dcc
ceddcfe ddcfe ddcfe
eefee fee fee
fff
rqrq rqrq rqrq jiji jiji hghg jiji hghg hghg hghg
^]^] ^]^] __^]^] `_`_ `_`_ `_`_ baba baba baba
^]\[^]\[ _^]\[ `_ `_ `_ ba ba ba
\[\[\[\[ \[\[
ZYZY ZYZY ZYZY
ZYXWZYXW ZYXW
XWXWUXWXWU XWXWU
T
VUVVUVVUV
UVUVUV
3 qr rq rq ji ji hglk ji hglk hglk hglk
lkk lklk lklk lklk
2 1 0l
nmnm nmnm nmnm nmnm
3 2 1n
mpo nmop nmpo nmpo
poo popo popo popo
3 2p
tsts tsts tsts tsts
3t
svu tsvu tsvu tsvu
~}~} ~}
~}~}~}~} ~}~}
|{|{ |{|{ |{|{
|{zy|{zy |{zy
zyzywzyzyw zyzyw
T
xwxxwxxwx
wxwxwx
vuvu vuvu vuvu vuvu
i=2
Figure 13:
AABAA BAA BAA
ACBBADC BBADC BBADC
CCDCC DCC DCC
DDD
i=3
x?.%WMI3OPA.1>*l3B+<143hM9A{T4]2793T!Oi%9D
O_&)T9%8OXM&HO0O\9%8O0OM
7R%&~\8?C&)T!O_%
Z9793BD
;=*>1@?*,+Q&H1
DF3MR1 MR14%l]^Mr;=*>1@?F1@?.%kO_%R+.-1@?<i3[Zr1@?.%WMR?.3B7!14%8MR1].C&H1@?WZ'7R3BD
143
m S
i
S
C
Á BH[¡¢s²V¡¯Vºc¡¢4V¡¯u³_¨IbV¡¯B^«^¬= VV¨I§¢§¯»Y¨¦4¦[¡¯®g¨[~g4¡¯4²¨N[¡¢B°~9V¡¢'[R°j¡¢j´p¡¢ºB²)¦[ R¤ Ê
=
¨I§¢§CRªk~»9R§¢§¢eV¨R®±.RRh§¢¨±yR§¢9°F¼@¨V°
¨¦[¡¢c³_¨I9¦[8¨I©V¨±V§¢³¢¦[Bª
¡¢
[~¡¢eµ~¨IªkV§¢!½ £¿
V~°¨cbV#¦b[RbuC¨N[³¢¦[Bª
[ «^¬=Wb©¨¦bd³¢¦[Bª
¼0¬~¡¢©jV¨I§¨±ySR§
½¨I~°j³B§¯§¢N¬ ¨s»
S
T
T
21
¨[
B³°~R9¦[8¨4¡¢~ºg§¨N±yR§¢¼
½e²VH[¡¢§.¬= V¨I§¯§¯»k¦[8¨ £
20, 19, . . .
S
`©
R¤
4
3
2
3
4
5
6
7
5 6 7
1 0
2 1
3 2
4 3
5 4 6
5
6
8
9
"!! "!"! "!"! "!"!
10"
""! !""! !""! !""! 15 16 17 18 19
9 !
14 15 16 17 18
10 11 12 13
14
15
16 17
20 19
12 11 21 20
22 21
10 9 23 22
11 12 13 17 18
10 11
18 19
9 10
8
9
7
8
19 20
20 21
21 22
i = 23
Figure 14:
x?.%ÆMI3OPA.1>*l3B+ 143M9A^T4]27R3T!O_%RD
MI3OXa%8M/1@?.%Æ-)%9+`%R79&HOP*s%(<]27R3T!O_%RD & +(
@1 ?.%3B78*0-#*,+&HO^]2793T!Oi%9D '&FMR?.3B7!14i%8MR=
1e].23
&H1@?/*>Mh3T!1b&*0+`%'(ÆT8:MR1b&7!1>*0+.-rZ97R3BD
& +(
T
Z3O,O_3B;*0+.-F&W].&H1@?<3[Zk(~%'\R7R%'&HM'*,+.-O&)TR%8OXM m
É^9RÇ¥ºB94k[~rÁÂÂ
¡¢ªkV§¢Rª9s©¨4¡¢BB³[~·¨N±yN®·ª'[~° £
¬¡¯[
¨I~°
¨I~°RH4¦[¡¢9B³C»y
¡¢¨yBfloor
¡¯s[9¦[d[~
°~¡¢ªR~4¡¢B~
£ ¼@´)#¦[ª¨I§¢§»«
int
~¦[bR§¢9ªRsenB+³{2¨I
¨¦4¦©m
¨R»+B³ 2
yB¡¢s49¦[[
«±²)e¬=b[¡¯§¢§.8¨Ifloor
§¯§C[~¡¢=¨E¬=°~¡¢ªR~4¡¢BV¨I§
¨¦4¦[¨8»)½ £¿ ~Rbr°~¡¢ª9Vb¡¢B~
§¢8n¨R®+2b¨IR³#¦'µ4int
¦©¨g¬¨I§¢§¯4²)¦4¦[B²~~°~¡¢~ºk[~ s#¦ £ ²~F'µb¦©¨
¬¨I§¢§¯¨§¢§¢!¬ ²V[gºB9¦[¡¢°YB³lyRR¡¨§{8¨4RRÊ Vs#¦RR§¯§¢V¨R®¡¯VºW§¢R4[V¨IY³B²)¦¨I°BÄl¨IR9s9R§¢§¢ £
><ºB9V'¦©¨I§>«¨I¨¦4[¡ VR¡¢¨I§°V¨©¨Y¡¯4Rª [V¨ºB²V¨¦[°~·[~c¨I9[²V¨I§e°V¨©¨¨Iº¨¡¢~b·by9R¡¨I§e8¨4Rr¡¢
8¨I§¯§¢R°¨MI%R+21>*0+`%8O £
¿ ~E~8¨N¦4B³[~V¦4Bº#¦©¨Iª ¼0¬~¡¢©Y¨~y8¨N¦[¨I ¦4Bº#¦©¨Iª Èr±yR§¢!¬½e¡¢¨W§¢#4¨N
RBªgÅ
V²)[R[~bB§¢²)[¡¢B[ub²~±~~¦[#±V§¢Rª
³¢¦[Bª 4V4B§¢²)[¡¯B4u4²)±~~¦[#±V§¢Rª
«s³#¦
£
i−1
¡¢¦[i8¨°V¡¯§¯»¨R®I¨I¡¢§¨±V§¢IÊp¬=49=[~
Rs4¦b»R#¦4i¦[R=ly1,B~2,°V.¡¯V. .º
¿ V4B§¯²~4¡¢Bk[4²)±~V¦4#±§¯Rª
[ [ «B¨I~°·[~RH4¦[¡¢RpR#¦4¦[0RlyB~°V¡¯Vº[
[~Rªk~»uRR§¢§¢^[ floor
¼,4V¡¯{¡¢pª8¨Is^[¡¢~°~¡¢8¨N[
S 0
−1
[V¨=[~RR§¢§^V¨I~#=±yR9Y§¨±yR§¯R°c»'½ £ ¨I§¢§¯¨N¦[d¨§¯¬¨R»=§¨±y9§¢R°
¬
¡¯[c[~u¡¢H[RºB9¦
£
−2
>Y¡¯[9¦[¨[¡¢B B³{[~d§¢s#{«)¬=Eb¡¢ªkV§¯»ºBg[)¦[B²~ºB¨I§¯§24V»9²~~§¨±y9§¢R°h9R§¢§¢
¨I~°Y§¨±yR§
i
'µ)¨I9[§¯»[~B~R
¬
¡¯[ [V¨V¨R®E¨IY¨°Äl¨I9RsRR§¯§2¬
¡¯[
§¨±yR§
£¿ ~d§¢s#
49¦[ª¡¢V¨[9
i
i−1
¨I4sB¨I~~¦[Bº#¦[R4¡¢ª¨I°~·¨s»ª#¦4#«.ª8¨I~¡¢~ºg4¨NV~9¬R9§¢§RB²~§¢°±y§¨±y9§¢R°¡¢
[~R²)¦4¦[RH¡¯['¦©¨[¡¢B £ (9¦[d¡¯=4VuR°~ £
The shortest path program.
¦[9~¦[94Rs
[~ Vs#¦c±s»¨Æ°)»V¨Iª¡¯8¨I§¢§¯»<¨I§¢§¯8¨4R°5¬=s°~¡¢ªR~4¡¢BV¨I§
¨¦4¦©¨R»
// main loop : find and label cells reachable in i =1 ,2 ,... steps
for ( int i =1;; ++ i ) {
bool progress = false ;
for ( int r =1; r < n +1; ++ r)
for ( int c =1; c <m +1; ++ c ) {
if ( floor [r ][ c ] != -1) continue ; // wall , or labeled before
// is any neighbor reachable in i -1 steps ?
if ( floor [r -1][ c ] == i -1 || floor [ r +1][ c ] == i -1 ||
R¤
floor [r ][c -1] == i -1 || floor [ r ][ c +1] == i -1 ) {
floor [ r ][ c ] = i ; // label cell with i
progress = true ;
}
}
if (! progress ) break ;
}
³²~V'[¡¢Bj¨N¦[Wª#¦4·#¦d§¢94ul4¦©¨I¡¢ºBH[³#¦4¬¨¦4° £ >V¡[¡¨I§¢§»«V¬=
¿ ~r#[~9¦C¨N¦4[B³[~
¦[8¨°h[~u°~¡¢ª9Vb¡¢B~e³¢¦[BªÍlmain
©¨I~°V¨¦[°h¡¯~V²)¨I~°°~W[~°)»V¨Iª¡¢¨I§¯§¢8¨N[¡¢B £
// read floor dimensions
int n ; std :: cin > > n ; // number of rows
int m ; std :: cin > > m ; // number of columns
// dynamically allocate twodimensional array of dimensions
// ( n +2) x ( m +2) to hold the floor plus extra walls around
int ** floor = new int *[ n +2];
for ( int r =0; r <n +2; ++ r)
floor [r ] = new int [m +2];
'µ8«H¬=e¦[R¨I°g[~
V#¦V§¨Ir³¢¦[Bª l©¨I~°V¨¦[°g¡¯~V²) £ ¨44²~ª[V¨¡¯¡¢ºB¡¯®Rr¦[N¬¬¡¢b
¨IW¨Y4R¸²~R~R
B³
©V¨¦©¨I'[9¦[R«¬~9¦[
¨I~°
l©I¨ ~°<³#¦W4B²)¦[Rh¨I~°©¨¦4ºB98«
nm
’S’
’T’
¦[9~¦[94Rs4g¨h¬¨I§¯§>«¨I~°
¨I9ªkV»RR§¢§ £F¿ V¡¢)V²) V¢§ ³#¦rB²)¦¡¢~¡¯[¡¨I§'µ)¨IªkV§¢k³¢¦[’X’
Bª
´p¡¢ºB²)¦[ ! ¬=B²~§¢°c[~R§¢s’-’
#¹c¨I¡¢´p¡¯ºB²~¦4 8 12
------X - - - - -XXX - -X - - - - --SX - - - - - - - ---X - - -XXX - ---X - - -X - - - ---X - - -X - - - ---X - - -X -T - -------X - - - -
Figure 15:
+]2A.1^ZI3B7 7939-B79&D
F\93B7879%8Ml]y3B+(*0+.-1431@?.%
%~&Dr]^Oi%
3[Z|*0-BA7R%
> ³#[~9¦^©V¨¦©¨I'[9¦[{¨¦[³B²~V°u¡¢u4V¡¢)V²)¼>#¦^¡¢³[~¡¢)V²)y~¦[Rª¨[²)¦[9§¯»
±y9RBªR2Rªk~»~½'«
¬=·ºBR~9¦©¨N[·Rªk~»RR§¯§¢ £ ~¡¢§¢d¦48¨I°~¡¢~ºk[~ V#¦V§¨I2«V¬=E²)4V¨NV~¦[#~¦[¡¢¨[d¡¯s[RºB'¦[
¡¢H[r4VRH4¦[¡¢RB³
«¨V°
¬=¦[9ªRªr±.9¦e[~[¨¦[ºB9yB4¡¯4¡¢B
³#¦§¨49¦ £
floor
// target coordinates , set upon reading ’T ’
int tr = 0;
int tc = 0;
`©
// assign initial floor values from input :
// source :
’S ’ - >
0 ( source reached in 0 steps )
// target :
’T ’ - >
-1 ( number of steps still unknown )
// wall :
’X ’ - >
-2
// empty cell : ’ - ’ - >
-1 ( number of steps still unknown )
for ( int r =1; r <n +1; ++ r)
for ( int c =1; c < m +1; ++ c ) {
char entry = ’- ’;
std :: cin > > entry ;
if
( entry == ’S ’) floor [ r ][ c ] = 0;
else if ( entry == ’T ’) floor [ tr = r ][ tc = c ] = -1;
else if ( entry == ’X ’) floor [ r ][ c ] = -2;
else if ( entry == ’ -’) floor [ r ][ c ] = -1;
}
!¬
¬=u¨I°~°h[~4²)¦4¦[B²~~°~¡¢~ºr¬¨I§¯§¢=¨I4Rs4¡¢~R§¢ £
// add surrounding walls
for ( int r =0; r <n +2; ++ r)
floor [r ][0] = floor [ r ][ m +1] = -2;
for ( int c =0; c <m +2; ++ c)
floor [0][ c ] = floor [ n +1][ c ] = -2;
'µpRBª9^[~ª¨I¡¢§¢#u[V¨2¬=V¨R®¨§¯¦[8¨I°)»°~¡¢49²Vb4R°¨±y!® £ ,p§¨N±yR§¢^¨I§¢§#¦48¨I©V¨±V§¢
R R§¯§¢R«N44¨N^¬=#±~©¨I¡¢u¨e§¨±y9§¢¡¢~º=¨I2¡¢E´{¡¢ºB²)¦[ R¤)£ ´¦[BªL[~¡¢2§¨±yR§¯¡¢~º)«9¬=ªr²~b2~N¬/µ4¦©¨9
[~
bV#¦b[RbC¨N[k³¢¦[Bª
[ £ à 'µV§¨¡¢~R°k¨±.N®#«H[~¡¢8¨Ik±y°VB~±»W³B§¢§¢!¬¡¢~º¨u©V¨I¡¢
S T
B³¨°Äl¨I9RsRR§¯§¢¬¡¯4F°~R9¦48¨I4¡¢~ºc§¨±y9§¢ £ ´)#¦u9®9¦4»SR9§¢§BF[~¡¢¨[¼>'µR9~ ½'«.¬=·V²)
¡¢s[c[~gR#¦b¦[RbyB~°~¡¢~º
RH4¦4» 4V¡¯d¨I§¯§¢N¬
²V[°)¦©¨R¬[S~W¨[¡¢
[~g¡¯s[RºB'¦
−3
floor
[~·4²)±V4R¸s²V9sB²)4V²) £ >³~k¨[Y¬¨I³B²~~°Æ¼,#¦¡¢³`[~9¦[E¡¯Vk[¨¦[ºB9½«[~d±ys°)»B³`[~
b©¨[9ªRs=¡¢
[~u³B§¢§¯N¬
¡¢~º·R°~³¢¦©¨IºBªRH¡¯u¼>9#¦4¦[R94§¯»~½e~#µ)RR²)[9°¨¨§¢§ £
while
// mark shortest path from source to target ( if there is one )
int r = tr ; int c = tc ; // start from target
while ( floor [r ][ c ] > 0) {
int d = floor [r ][ c ] - 1; // distance one less
floor [r ][ c ] = -3; // mark cell as being on shortest path
// go to some neighbor with distance d
if
( floor [r -1][ c ] == d ) - - r;
else if ( floor [r +1][ c ] == d ) ++ r;
else if ( floor [r ][ c -1] == d ) - - c;
else
++ c ; // ( floor [r ][ c +1] == d )
}
´p¡¢V¨I§¢§»«.[~gB²)4V²)8ʬ=Wª¨F[~W¡¯s[RºB'¦dRH4¦[¡¢9uB³
±¨I[¹[h©V¨¦©¨I'[9¦[R«^¬~9¦[
floor
±.RRBªR
«B²)¦C¨N[b»ªr±yB§ £ >~49¦b[¡¢~º
¨[~u¦[¡¯ºBs=V§¨IRR9«V¬=#±~©¨I¡¢h¨WR#s»
−3
B³C[~¡¢)²) V’o’
#¦8«¬¡¯4W[~
bV#¦b[RbC¨N[¨~y8’\n’
¨¦4¡¢~ºu¡¢k¨I°~°V¡[¡¢B £
ªr²Vl¨I§¯4d~#³#¦4ºB9
[W°V9§¢9[[~u°)»¨ª¡¢8¨I§¢§»k¨I§¯§¢8¨N[R°
¨¦4¦©¨R»¡¢h4VR~° £
// print floor with shortest path
for ( int r =1; r <n +1; ++ r ) {
for ( int c =1; c < m +1; ++ c)
if
( floor [r ][ c ] == 0)
std :: cout
else if ( r == tr && c == tc ) std :: cout
else if ( floor [r ][ c ] == -3) std :: cout
else if ( floor [r ][ c ] == -2) std :: cout
else
std :: cout
std :: cout < < "\n ";
}
<<
<<
<<
<<
<<
’S ’;
’T ’;
’o ’;
’X ’;
’-’;
// delete dynamically allocated arrays
for ( int r =0; r <n +2; ++ r)
delete [] floor [r ];
delete [] floor ;
return 0;
> 8¨IbdB³B²)¦¡¢~¡¯[¡¨I§C'µ~¨IªkV§¢I«[~uB²)4V²)§¢#¹§¯¡¯¹u¡¯´p¡¢ºB²)¦[ È £ ¦[Bº#¦[¨Iª
[~RBªkV§¢9[4B²)¦[9dRs°V £
Èr4~N¬
ooooooX - - - - oXXX -oX - - - - ooSX - oooooo ---X - - -XXXo ---X - - -X -oo ---X - - -X -o - ---X - - -X -T - -------X - - - -
Figure 16:
AC1¯]2A.13[Z =7R39-#79&D
3B+51@?.%r*,+]2AC1u3[Zr|*0-#AC7R% # include < iostream >
int main ()
{
// read floor dimensions
int n ; std :: cin > > n ; // number of rows
int m ; std :: cin > > m ; // number of columns
// dynamically allocate twodimensional array of dimensions
// ( n +2) x ( m +2) to hold the floor plus extra walls around
int ** floor = new int *[ n +2];
for ( int r =0; r <n +2; ++ r)
`©
B
floor [r ] = new int [m +2];
// target coordinates , set upon reading ’T ’
int tr = 0;
int tc = 0;
// assign initial floor values from input :
// source :
’S ’ - >
0 ( source reached in 0 steps )
// target :
’T ’ - >
-1 ( number of steps still unknown )
// wall :
’X ’ - >
-2
// empty cell : ’ - ’ - >
-1 ( number of steps still unknown )
for ( int r =1; r <n +1; ++ r)
for ( int c =1; c < m +1; ++ c ) {
char entry = ’-’;
std :: cin > > entry ;
if
( entry == ’S ’) floor [ r ][ c ] = 0;
else if ( entry == ’T ’) floor [ tr = r ][ tc = c ] = -1;
else if ( entry == ’X ’) floor [ r ][ c ] = -2;
else if ( entry == ’ -’) floor [ r ][ c ] = -1;
}
// add surrounding walls
for ( int r =0; r <n +2; ++ r)
floor [r ][0] = floor [ r ][ m +1] = -2;
for ( int c =0; c <m +2; ++ c)
floor [0][ c ] = floor [ n +1][ c ] = -2;
// main loop : find and label cells reachable in i =1 ,2 ,... steps
for ( int i =1;; ++ i ) {
bool progress = false ;
for ( int r =1; r < n +1; ++ r )
for ( int c =1; c <m +1; ++ c ) {
if ( floor [r ][ c ] != -1) continue ; // wall , or labeled before
// is any neighbor reachable in i -1 steps ?
if ( floor [r -1][ c ] == i -1 || floor [ r +1][ c ] == i -1 ||
floor [r ][c -1] == i -1 || floor [ r ][ c +1] == i -1 ) {
floor [r ][ c ] = i ; // label cell with i
progress = true ;
}
}
if (! progress ) break ;
}
// mark shortest path from source to target ( if there is one )
int r = tr ; int c = tc ; // start from target
#"
while ( floor [r ][ c ] > 0) {
int d = floor [r ][ c ] - 1; // distance one less
floor [r ][ c ] = -3; // mark cell as being on shortest path
// go to some neighbor with distance d
if
( floor [r -1][ c ] == d ) - - r;
else if ( floor [r +1][ c ] == d ) ++ r;
else if ( floor [r ][ c -1] == d ) - - c;
else
++ c ; // ( floor [r ][ c +1] == d)
}
// print floor with shortest path
for ( int r =1; r <n +1; ++ r ) {
for ( int c =1; c < m +1; ++ c )
if
( floor [r ][ c ] == 0)
std :: cout
else if ( r == tr && c == tc ) std :: cout
else if ( floor [r ][ c ] == -3) std :: cout
else if ( floor [r ][ c ] == -2) std :: cout
else
std :: cout
std :: cout < < "\n ";
}
<<
<<
<<
<<
<<
’S ’;
’T ’;
’o ’;
’X ’;
’-’;
// delete dynamically allocated arrays
for ( int r =0; r <n +2; ++ r)
delete [] floor [r ];
delete [] floor ;
return 0;
}
Program 16:
]27R39-M ^
MR?.3B7!14%8MR1 ].&H1@?Cm@t
2.6.12 Beyond arrays and pointers
à ¦4¦[¨8»¨¦[®'¦4»5²~4R³²~§³#¦ª¨IH»/©¨Ib¹¨I~°¨§¢§¢!¬Í²~g44B§¯®~Bsb¦[¡¯®¡¢¨I§~¦[#±V§¢9ªW§¢¡¹
V~°V¡¯Vºg4~#¦4[Rb¨[~¡¯4VE~¦['®¡¢B²~4R'[¡¢B £ ´¦[Bª¨g[~R#¦['[¡¢8¨I§^yB¡¢HB³`®¡¢9¬d«y¨¦4¦[¨8»
¨¦[¡¢³_¨94VB~§¯»RBH©¨I¡¢~9¦[=[V¨=¬=V9R° £
[~#4V'¦V¨I~°2«[~9¦[¨¦4¬=rª¨I¡¢°)¦©¨R¬
±¨I[¹=B³{¨¦4¦©¨R»[V¨e¬=¬¨IH=[r¦4R8¨V¡¯bÅ
²~§¨[~9¦[ £
à H»r¨¦4¦©¨R»«9®Rg¡¢³¡¡¢°~»V¨Iª¡¢8¨I§¯§¯»u¨I§¢§¢s8¨[R°2«#V¨I¨ )µ)R°W§¢R~º#[ £
> #[~9¦e¬=#¦[°~R«H¬=¨R®
4¹~N¬ TR%>Z3B7R%·°~V~¡¢~ºE#¦=°)»V¨Iª¡¢8¨§¢§¯»¨I§¯§¢8¨N[¡¢~ºd¨
¨N¦4¦©¨R»~N¬
ª¨IH»YR§¢Rª9s[¬=r~RR°[cb[#¦4r¡¯¡¯ £ ³¢4R2«{[~¡¢¡¢²~)¦[8¨I§¯¡¢b[¡¢ £ ´)#¦'µ~¨IªkV§¢I«.¡¢bBª
¨~V§¢¡¢8¨N[¡¢B
¬=dª¡¢ºBs~RR°[kb4#¦[·¨g49¸²~R~R·B³¡¢)V²~²~ª±y9¦[9«±V²)
¬=E°~B2Ç ¹~N¬¡¢
¨I°)®I¨I~Ru~!¬Lª¨IH»²~ª±y9¦[e¬=¬¡¢§¯§CºB9 £ à »V¡¢8¨I§ b4B§¢²)[¡¢B ¡¢e[r°)»V¨Iª¡¢8¨§¢§¯»W¨I§¢§¢s8¨[
Arrays have fixed length.
`©
I¤
¨W®9¦b»§¨¦[ºBd¨¦4¦©¨R»¨I~°Ä²~b~#yE[V¨[~·4R¸²~R~R ~[¡¯ £
¿ ~E~¦[#±V§¢Rª¬¡¯4[~¡¢¨I~°
¨·±y94['¦d¼,±V²)b[¡¢§¯§yR²~ªr±y'¦[4Bª!½4B§¯²~4¡¢Bh¨N¦[dB²)[§¢¡¯V9°
¡¢ `µ9¦[R¡¯4EÈ £
à l¦[R¨I§ bB§¢²)[¡¢BJ¡¢yB4b¡¯±V§¢
¡¯QÁÂÂ4~¦4B²VºB[~²~4hB³Ea%'\8143B7!M £Q¿ V94Y¨¦[hRBÅ
©¨I¡¯V'¦[³¢¦4BªÀ
[~b©¨I~°V¨¦[°h§¢¡¯±~¦©¨¦4»g[V¨
9Bªr±V¡¢~[~R§¨I4b¡¢8¨I§^¨¦4¦[¨8»c³²~~9[¡¢BV¨I§¯¡¯»Y¼@¨I~°¡¯4
gR¡¢R~9»)½e¬
¡¯[
4VyB4b¡¯±V¡¢§¢¡¯»kB³{º#¦[!¬¡¢~ºc¼@¨I~°h4)¦[¡¯~¹¡¢~ºH½¡¢h§¯R~º#[ £ R'[#¦[8¨Ih±y¡¢ªgÅ
V§¢RªRH[R°B[#cB³^¨¦4¦©¨R»R«)¨I~°[~9»V¨R®4Bª9[~¡¢~ºu4¡¢ª¡¢§¨N¦4E[~ªR©V¨I~¡¢4ª B²)[§¯¡¢~R°
¡¢ µ)9¦[9¡¢4È l±V²V¡¯§¯g¡¯ £ 99[#¦[¨I§¯4j§¨¦4ºBR§¯»<¦4RªN®
[~YV9RR44¡»JB³¬=#¦b¹¡¢~ºj¬¡[
yB¡¢H[9¦[ £ u¬
¡¢§¢§.ºB9[r®R9[#¦[u¼@¨I~°
4V9¡¯¦¦48¨I§¢
¡ R¨[¡¢B½§¨N[9¦¡¢
4V¡¯±ys#¹ £
¿ V²~[¨IºBB³CB²)bÅ>B³¯Å>±yB²~~°k¨¦b¦©¨R»W¡¯V°~¡¢9R¡¢V#°~9[99[R°k¡¯ÁÂu·«¨V°
[~
4¨Iª=VB§¯°V³#¦.B¡¢s['¦[4E¨I°~°)¦[R4bR¬~9¦4~d~¦[Bº#¦©¨ª #±VÄR9§¢¡¯®R £ ¡¯4g4Bª8¨¦[I«
»B²S8¨I¬
¦[¡¯4E4ª¨I§¢§^~¦[Bº#¦©¨Iª[V¨²~4r¨¦4¦©¨R»¨I~°SyB¡¯s[9¦4¡¢F¨gR#¦4¦[99ª¨I~V'¦8«±V²)¡¢
RBªkV§¢'µ~¦[Bº#¦[¨IªR«[~¡¢¡¢~#
8¨Ib»h¨¨§¢§ £ 9±V²~ºBºB¡¢~ºr³_¨IR¡¢§¢¡[¡¢R=B³ªs°V'¦[hRBªkV¡¢§¯9¦[=8¨I
~R§¯^«C±V²)9®RF¬=9§¢§Å>4Rb[R°F¨I~°S³¢¦[R¸²~RH[§¯»²~4R°F§¨¦[ºBuV¦4Bº#¦©¨Iª°~~#V9RR4[¨N¦[¡¢§¯»ºB9¡
¦[¡¢ºBH £ >k³_¨I'8«4Bª=yR#V§¢¼>§¢'8Ç¥8¨I§¢§)[~Rª ¨4©¨I[¹9¦4©½¨¦4
ª¨¹¡¢~ºu¨±V²Vb¡¢~R4B³yµV§¢B¡¯[¡¯Vº
~¦[Bº#¦©¨Iªª¡¯Vº9¦4¦4#¦[¦[R§¨N[R°[r¨¦4¦©¨R»=¨V°yB¡¢H[9¦[¡¢
#¦4°V'¦e[9¦[8¨4ª¨§¢¡¢R¡¢B²~4B³¢¬¨¦[ £
²)V.B4E[V¨
4VE¨4©¨I[¹9¦¹~N¬
[V¨bBªu~¦[Bº#¦©¨Iª Q4V¡¯~¹B³¨S#.9¦©¨[¡¯Vºgb»b4Rª
¦[B²)[¡¢~r#¦·¨¬=9±V49¦4®9¦ ª¨8»Æ¼>²~~¡¢H[Rs4¡¢BV¨I§¢§¯»)½¬
¦[¡[W¡¯~V²)u°¨N©¨±.9»B~°j[~W±yB²~~°~dB³
¨I¨¦4¦©¨R» £ ²Vk4S[~k®BÅ R²~ª¨I~¨N¦[©V¡[R9[²)¦[I«4V¨¦4B³e[~ª¨I¡¢ª9ª#¦4»F±.R¡¢~º
¨IR9¡¢°~Rs©¨§¢§¯»Æª°~¡ VR°J¡¯J[~¡¢g¬¨R»Jª¨R»RBs©¨¡¢J[~Y¨I94²¨§~¦[Bº#¦©¨Iª ¡¢~b4¦[²~94¡¢B~ £¿ ~
¨4[¨I[¹9¦Eª¨R»Y[~R±.g¨±V§¢[cV¦49¨¦[k¨j¡¢)V²~[c[~r~¦[Bº#¦[¨Iª ¡¢j4²~©/¨¬¨R»S[V¨[~
~¦[Bº#¦©¨Iª ª°~¡ VR¡¯44R§¢³4°~¬V¨[9®'¦d[~k¨N4©¨I[¹9¦E¬¨s[u¡¯d[h°V £¿ ~¡¢dªs°~¡ V8¨[¡¢B
¦[²~~¬¡¯[4V[¨ª·¨IRR94¦[¡¢ºBs4¨I[~#¦[¡¢ºB¡¢V¨I§^B~#«2¨I~°S4V94ª¡¢ºBs±y¨I°~ª¡¢~¡¢b4¦[¨[#¦
¦[¡¢ºBH[=¡¢h[~¬=#¦[b8¨I4 £
>J[~¡¢¬¨8»«¨I5¨4[¨I[¹9¦kRB²~§¢° bV¡ Äb¨©¹ [~
RBªkV²~49¦[V¨W¦4²V~r[~c~¦[Bº#¦©¨ªY«¨I~°
4²)±V4R¸s²V9s[§¯»cª¡¢b²Vb¡³#¦
¡¢§¢§¢9º¨I§.¨I'[¡¯®¡[¡¢Re §¢¡¹u49V°~¡¢~ºrb¨IªY«#¦¨¦©¨I§¯» R¡¢~º·¬=9±Y4'¦4®9¦[
±» Vs°~¡¢~º4V9ªÀ¬
¡¯[
¦4R¸²~Rb4 £
´)#¦e²~[V¨¬=
¨¦[~#
¼,»9½~¦[B³944¡¢BV¨I§~~¦[Bº#¦©¨Iªª9¦4R«#[~4R9²~¦4¡¯»¨Ib.R9¡¯§¢R4B³2¨
RB~R9¦4
~9¦[ £ h#¦4¡¢ªky#¦4©¨s¡¢[V¨~¦[Bº#¦©¨Iªª¡¢~º9¦4¦4#¦[°~²~[·¡¢ªk~¦[#y9¦²~4B³^¨¦4¦[¨8»
¨I~°yB¡¢H[9¦[8¨I±.u®9¦4»hV¨¦[°h[ ~°Y¨V°YB³¢4R¦[Rª¨I¡¯h²~~°V'[R9[9°Y²VH[¡¢§y[~9»
4²~°~°V9V§»
¦[Rb²V§¡¢Fl4¦©¨I~ºB¨I~°S4RRª¡¢~ºB§¯»h¡¢~'µV§¢¡¯8¨±V§¢u±.RV¨8®¡¢#¦B³[~·V¦4Bº#¦©¨Iª £ à §¢bV'¦[#«2²~4¡¢~º
®R94#¦[E¡¢~b[R¨I°B³=¨¦4¦©¨R»d~R§¯VR«b¡¢~RW[~9¦4¨¦[Wª¨Is»y#[9s[¡¨§'¦4¦[#¦[d¦4R§¨[9°j[Y¨¦4¦[¨8»
¨I~°hyB¡¯s[9¦4=4¨N»B²Yb¡¢ªkV§¯»k8¨V~#ª¨¹¬¡¯4
®R94#¦[ £
Arrays are insecure.
!¬
» B²Yª¨R»
¨Ib¹
¬H»
¬=EV¨R®E¡¢H4¦[s°V²~R9°Y¨¦4¦©¨R»¨I~°yB¡¢H[9¦[
¨
¨I§¢§.¬
~Rh[~9¦[d¨¦[ª#¦[ V'µ)¡¯±V§¢¨I~°
[¨I³9¦¨I§¯[9¦4¨N[¡¯®R £ (
'¦[d¨N¦[4V[)¦[R¦[8¨IbBV £
Why arrays, after all?
#£ à b¦ ¦©¨R»`¨I~°yB¡¢H[9¦[p¨¦[[~4¡¯ªk§¯Rb{ª°~R§¢{B³V¡¯ªky#¦4©¨IH^b©¨I~°V¨¦[°§¢¡¯±~¦©¨N¦4»d9BV99~[
¼>9Bs©¨I¡¯V'¦
¨V°h¡¯[9¦©¨N[#¦½ £
§¢¡¹W®R94#¦[R«¨¦4¦©¨R»E8¨I/±yk¡¢H4¦[s°V²~R9°j¬¡¯[~B²)d4VgV9R°Æ4Y°V¡¯4R²~4·b»s©¨I'[¡¢8¨I§
£ ~
¨I~°F4Rª¨IH[¡¢8¨I§p¨Iby99[B³ÁÂu ³²~~9[¡¢B~¨I~°9§¨I449W¼,4¨N¬=rb¡¢ªkV§¯»h°~B2Ç V¨R®
¨B²)¦°V¡¯byB[¨I§^¨=[~¡¢=yB¡¢H½ "£ >j#¦4°V'¦d[c¦[8¨I§¢§»F²~~°~9¦[b[¨I~°j§¨['¦d~!¬ l©¨I~°V¨¦[°j§¢¡±V¦[¨¦4»RBH©¨I¡¢~9¦[u¨I~°j¡¯49¦©¨[#¦4
¨¦4¦[R¨I§¢
¡ R9°^«)¡¡¯~RR94[¨¦4»c[r¹~N¬ ¨±.B²~¨¦b¦©¨R»¨I~°hyB¡¢H[9¦[ £
¿ ~©¨¹'Å>VBªªR44¨IºB~9¦4¡¢[~¡¢RÊ¡¯¡¢¡¢ªky#¦4[¨Is`[uºB9³_¨ª¡¢§¢¡¨¦p¬¡¯[r[~W\'3B+`\9%b]^1@M
±yR~¡¢~°
¨¦4¦©¨R»¨V°cyB¡¢H[9¦[R«s±²)¡¯=¡¢=§¢94=¡¢ªky#¦4©¨s4±.d¨±V§¢4g¨I'[²V¨I§¢§¯»WV¦4Bº#¦©¨Iª ¬¡[
¨¦4¦[¨8»
¨V°
yB¡¢s49¦[=BY¨§¨¦[ºB48¨I§¯ £
2.6.13 Details
> ¦4Bº#¦©¨Iª ³#¦El4¦[¡¢~ºhª¨N[©V¡¯Vº)«y¡d¡¢~#u®'¦4»jRBH®R~¡¢RH
[V¨[~Wb8¨¦[©/b4¦[¡¯Vºc¡¢ V%'( £ r4V9¨R®r[
¦[9RBªkV¡¢§¢·[~r~¦[Bº#¦[¨Iª '®9¦4»S[¡¢ª·¬=
¬¨IH[r48¨N¦[©Y³#¦¨I~#[~9¦b4¦4¡¢~º £
à ª#¦[ µ)¡¯±V§¢¨I§¯['¦[V¨[¡¯®¡¢[E¨Ib[~48¨N¦[©
bb¦[¡¢~º·¨Ie¨c\93BDhDS&+(cOX*0+`%k&7b-BAD%R+21
[V¨=¬=u~¦[!®¡¯°V²)yBR¨I§¢§¢¡¢~ºE[~~¦[Bº#¦©¨Iª £
¿ ~Wª¨I¡¢S³²V~94¡¢Bj8¨Ij¨IRRRbE4²~©RBªª¨I~°F§¯¡¢~W¨N¦[ºB²~ªRs[¡¢³¬=W~¦[!®¡¢°~r4²~¡¯©¨±V§¢
¨¦©¨Iª'[9¦[ £ (
9¦[¡¢~!¬¶[~ ~¦[l4R§¢¡¯V9B³ `¦[Bº#¦©¨Iª V¨8®[±y©¨VºB9°j¡¢S#¦[°~9¦
[Wª¨¹[~¡¢e¬=#¦4¹ £
Command line arguments.
# include < iostream >
// Program : string_matching2.C
// find the first occurrence of a string ( provided as command
// line argument ) within the input text , and output text so far
int main ( int argc , char * argv [])
{
if ( argc < 2) {
// no command line arguments ( except program name )
std :: cout < < " Usage : string_matching2 < string >\ n" ;
return 1;
}
// search string : second command line argument
char * s = argv [1];
¨I~°·¨I~°
¼,¬
~¡¢©E¡¢¨·¨¦4¦©¨R»uB³yB¡¢H[9¦[{8¨I©·B³¬
~¡¢©E¡¢d[²)¦[
¿ ~®#¨I§¯²V9pB³
argc
argv[]
yB¡¢H[[[~ ~¦[bR§¢9ªRs[pB³C¨ R9¦4IÅ>[9¦4ª¡¢V¨[R°¨¦b¦©¨R»B³©V¨¦©¨I'[9¦[©½`¨¦4e¡¢~¡¯[¡¨I§¯¡
RR°d±s»·[~
#y9¦[¨[¡¢~ºb»b[Rª¶¬~RW¡¯8¨I§¯§¢p[~
³²~V'[¡¢B £ e¬
¡¢§¢§µV§¨I¡¢³²~~9[¡¢B¨¦©¨Iª'[9¦[`¡¢
main
°~9©¨I¡¯§V§¢¨[9¦8«H~9¦[¬=¬¡¯§¢§)±y
[¨N[¡¢ VR°g¬
¡¯[¨k'µ~¨ªk§¯ £ ²)~yB44¨N¬=R¨I§¢§)[~~¦[Bº#¦©¨ª
§¢¡¯¹[~¡¢¼@¨Ib4²~ª¡¢~º¨ ~¡µsÅ>».ub»b[Rªc½Ê
./ string_matching2 bool
¼,¬
~¡¢©Æ9B²VH[E[~²~ª±y9¦dB³RBªª¨V°F§¢¡¢~¨¦4ºB²Vª9s[©½ºB9[·¡¢~¡¯4¡¨I§¢
¡ 9R°
¿ ~R
argc
¬¡[k®#¨§¢²~ £¿ ~¡¢9B²VH=¡¢~R§¢²~°~R[~~¦[Bº#¦©¨ª V¨Iª
¡¯44R§¢³`¼
¡¯4V¡¯
"string_matching2"
8¨Ib!½'«{¨I~°2¨Is»F¨I°~°~¡¯[¡¯B¨§pb4¦4¡¢~ºB~¦[!®¡¢°~R°FB[~rRBªª¨I~°
§¢¡¢~¼¯Ä²~bu4Vr4¡¢~ºB§¢bb¦[¡¢~º
¡¯
[~¡¢8¨I48½ £¿ ~ ¨¦4¦[¨8»
¨I~°
ºB9¡¢~¡¯[¡¨§¢
¡ RR°k¬
¡¯[c[~ubb¦[¡¢~ºB
"bool"
2
argv[0]
argv[1]
`©
È
I¨ ~°
¨I·°~R49¦4¡¯±yR°Æ¡¢< R9[¡¢B £ È £¢ ¨±y!® £ ÁeBVbR¸²~RH[§¯»«
"bool"
¨I³¢['¦d¡¯4°V ~¡¯4¡¢B2«C[~·yB¡¢s49¦®#¨¦4¡¨±V§¢
¡¯S[~W¨±y!®·¡¯RRB³Rs°~ryB¡¯s[[[~ ~¦[b
s
R§¢9ªRsB³¨ R'¦[IÅ>['¦[ª¡¢V¨[R°¨¦4¦©¨R»
B³`V¨¦[¨I9[9¦4
[V¨9#¦4¦[Rb.BV°~
4g[~dbb¦[¡¢~º
£
"bool"
¿ V¡¯EºB9[E²~E±¨I[¹j[
[~4¡¯[²V¨[¡¯Bj¡¢ `¦[Bº#¦©¨Iª ¨³¢[9¦·§¢¡¯V «¨I~°[~g¦[Rª¨I¡¯V°~9¦4dB³
±y#[c~¦[Bº#¦©¨Iª¨¦[¡¢°~RH[¡¢8¨I§ £
"string_matching2"
2.6.14 Goals
Dispositional.
à =[~¡¢=yB¡¢H8«»B²bVB²~§¢° £R£R£
½k¹~!¬¬V¨
¨IS¨¦4¦[¨8»h¡¢R«¨I~°Y¬V¨
¦[¨I~°VBªÍ¨IR9R4¨I~°¡¯[9¦[¨[¡¢BªR¨I¡¢[~E9Bs['µ
B³`¨¦4¦©¨R»
½²~V°~9¦4b©¨I~°h[~yB¡¢H[9¦RB~R9~8«V¨I~°~!¬ 4WRBªkV²)[¬¡[¨I°~°)¦[Rb4R
" ½k±yu¨8¬¨N¦[4¨Nu¼>¨I~°²~V°~9¦4b©¨I~°h¬
s»~½e¨¦b¦©¨R»¨V°cyB¡¢H[9¦[ªW²~b=±y²~4R°¬
¡¯[c8¨¦[
¤ ½k¹~!¬Í[V¨W©V¨¦©¨I949¦[k¨V° ¨N¦4¦©¨R»WB³©¨N¦©¨I9['¦[g8¨J±yh²~4R°J4y9¦[³#¦4ª
V¦4RRb4¡¢~ºW©¨b¹
±¨I4¡¢['µ
½k¹~!¬[V¨¼,ªW²~§¯[¡¯°V¡¯ªR~4¡¢BV¨§_½^¨¦4¦©¨R»eB³2®I¨¦[¡¢¨±V§¢
§¢9Vº#48¨I±y#±~©¨I¡¢~R°k±s»°)»V¨Iª¡¢
ªRª#¦4»¨I§¯§¢8¨N[¡¢B Operational.
>h¨¦4[¡¯R²~§¨¦8«H»B²Y4~B²V§¯°
±yu¨±V§¢[ £9£8£
¼ ½¦48¨I°2«#²~~°V'¦[b©¨I~°2«B¨I~°¨¦4ºB²V¨±yB²)4¡¯ªk§¯~¦[Bº#¦[¨Iªp¡¢H®B§¯®¡¯Vº¨¦4¦[¨8»¨I~°EyB¡¢H[9¦[
½¬¦[¡¯[uV¦4Bº#¦©¨Iª
[V¨°V
~r¨¦4¦[¨8»h®#¨¦4¡¨±V§¢R#¦°)»V¨Iª¡¯8¨I§¢§¯»c¨§¢§¢R¨[g¼,ªW²~§¯[¡¯°V¡¯ªRÅ
4¡¯B¨§_½¨¦4¦©¨R»
¼
¼ " ½¬¦[¡¯[~¦[Bº#¦©¨Iª[V¨
¦[8¨I° ¨bR¸²~R~RB³·°V¨©¨Æ¡¢s45¨¼>°)»¨ª¡¢8¨I§¢§» ¨I§¢§¢s8¨[9°
ªr²~§¯[¡¢°~¡¢ªR~4¡¯B¨§½`¨¦4¦©¨R» ¼ ¤ ½¬¦[¡¯[~¦[Bº#¦[¨Iªp[V¨`y'¦[³#¦[ª 4¡¢ªkV§¢°V¨[¨~¦[sRR4b¡¢~º[¨Ib¹±»²~4¡¯Vº¦©¨I~°~Bª¨IR9R4
¡¢F¼>ªr²V§[¡¢°~¡¢ªR~4¡¢BV¨I§¢½`¨¦4¦©¨R»¨I[~uª¨IÄ#¦e[sB§ ¼
½¬
¡¯[~¡¢g~¦[Bº#¦[¨IªR«H¡¯[9¦©¨N[!®9¦¨g¼>°)»V¨Iª¡¢R¨I§¢§¯»r¨I§¯§¢8¨N[R° Eªr²V§[¡¢°~¡¢ªR~4¡¢BV¨N§_½{¨¦b¦©¨R»
±s»
²~4¡¯VºryB¡¢H[9¦¨¦[¡¯4Vª'[¡¢
¼ Ƚ¬¦[¡¯[~¦[Bº#¦©¨Iª[V¨y9¦4³#¦[ª4¡¢ªkV§¢['µ~¦[R944¡¢~º©¨Ib¹¬¡¯4¨¦4¦©¨R»B³©V¨¦©¨IÅ
['¦[
2.6.15 Exercises
Exercise 55
& j?C&H1(~3I%8Mg1@?.%ZI3O0Oi3B;=*,+.-r]27R39-#79&D
3BAC1¯]2A.1>f&+(;?:
H
# include < iostream >
int main ()
{
int a [] = {5 , 6 , 2 , 3 , 1 , 4 , 0};
int * p = a;
do {
std :: cout < < * p < < " " ;
p = a + * p;
} while ( p != a );
return 0;
}
T J3B7R%-)%9+`%R79&HO,OP:HfM9AH])]y3MI%1@?C&H1*,+ 1@?.%Y]27R%RaI*b3BA.Mc]27R39-B79&D
f
*>M*0+y*>1>*&HOX*
s%'(Q;=*>1@?
a
MI3BDF%·MI%z8Ap%R+`\'%3[Z
°~¡ '¦[Rsd+yACDFT9%R7!ME*,+
b;%MI%9%·1@?*,MZI3B7
*0+
n
{0, . . . , n − 1}
n=7
1@?.%]27R%Ra#*l3BA.M]27R39-B7'&
D m 7R3Ba%1@?C&H1
1@?.%]27R39-B79&D 14%R78D
*,+&H14%8Mr*,+51@?*,M\&HMI%Im
¼ ½
}MRM9AD%·1@?C&H1*,+ÆMI3BDF%]27939-B79&D
f
Exercise 56
O_%R+.-1@?
m
n
& *,a%R+¶&/a&78*&)T!O_%
a
*>Mg&+ &7879&:j3[ZdAC+(~%R7!OP:s*0+.-1>:!]y%
int
&+(
[3 Zh1>:!]y%
;=*>1@?Jas&HOXA{%
f?.3B; \'&+ :V3BA3T!1b&*0+6&
int
0 i n
]y3B*0+214%R7
143Y1@?.%%ROi%RDF%R+21·3[ZW*0+(~%
*0+
g
3 14%JFE*¥Z
f1@?*>Mr*>M&HMRGI*,+.-dZI3B7h&
i
aH
i=n
].&HM91@Ub1@?.%8pU%R+(]y3B*,+214%97#m i
T *,a%R+ &h]y3B*0+214%R7
143M3BD%S%8Oi%9D%R+21E*0+ fd?.3B; \&+L:3BA 3T!1b&*0+¾1@?.%
*,+(~%
3[Z
1@?*,MW%8O_%RD%9+21 gp314%JF* Z
*,Mr&E]C&HMR1@Ub1@?.%8U%Ra+(]y3B*,+214%978fe1@?.%E*,+(~%©*>M(~%)e+`%'(Y&HM i m H
p
n
78*>14%
\93I(~%Z979&B-BDF%R+21@Mg1@?C&H1u\93BDW]2AC14% Z97R3BD
*,+Q& F&+(
Z'7R3BD
*,+T m
¼ ½
p
%81A.M\'&HO0O=&Y+&H1>A79&HO+yACDFT9%R7
i
i
p
Å@RBªk.B4¡¯[*¥Z&+(3B+2OP:F* Z*>1*>M(*,aI*>M9*T!Oi%cT8:
Exercise 57 E
k
%~&~\R1@OX:
(* ·%R7R%9+21u]278*,DF%S+yADFT9%R7!Mm `
| 3B7<
%)&DW]^O_%Rfu]278*0D%]y3B;%R7!M&7R% U\93BDr]y3M9*>14%9f
k
&+(
H& M;%RO,Op&HM
&7R% ~U'\'3BDW]y3M9*,14%Im78*>14%&d]27R39-#79&D
20 = 2 2 5
1@?C&H167R=
%'&)2(HMJ3+yADFTR%97!M
&+(
Z'7R3BD 1@?.% *,+]2AC1j&+(1@?.%9+ k_composite.C
3BAC1¯]2A.1@M&HO,O U
n 0
k 0
\93BDr]y3M9*,14%+yADFTR%97!M/*0+
m gB3 ; DF&+y: #U\93BDr]y3M9*>14%/+yADFTR%97!M &7R%1@?.%Rk7R%
{2, . . . , n − 1}
ZI3B7
¼ ½'¼ ¤ ½
n = 1, 000, 000 H
78*>14%&]27939-B79&D
1@?C&H1*,+ya%R7!1@M&
DS&H1>78*_
;=*>1@?7R%&HO%9+21>78*b%8Mm
invert.C
3 3
A
x?.%d]27R39-B7'&D MR?.3BA.O(Y7R%&)(j1@?.%+y*0+`%DF&H1>78*_%9+21>78*b%8MZ'7R3BD 1@?.%*0+]2A.1>fd&+(S1@?.%R+ 3BAC1¯]2A.1
1@?.%·*,+ya%R7!MI%·DF&H1>78* −1 93B71@?.%·*,+BZ3B78DF&H1>*l3B+/1@?C&H11@?.%·DS&H1>78*_
*>Md+`31e*0+ya%R7!1>*lT8Oi% m +
A
A
&)()(*>1>*l3B+yf1@?.%]27R3'-B79&D MR?.3BACO_(Y3BAC1¯]2A.1e1@?.%·DS&H1>78*_
−1 *,+53B79(~%R7r143cO_%81=1@?.%·A.MI%R7\8?.%'\8G
;?.%81@?.%R7F1@?.%/\93BDW]2AC1b&H1>*b3B+ 3[Z1@?.%*,+ya%R7!MI%;&HM&~\9AA
\RA79&H14% l*,+ 1@?.%Z9A.O0OX: &~\9\9AC79&H14%Æ\'&HMI%9f
1@?.%kO&H1@14%R7d]2793I(Ap\81*>M1@?.%g*(~%R+21>*>1>:DF&H1>78* m
Exercise 58
`©
| 3B7E1@?.%W\93BDr]2A.1b&H1>*b3B+3[Z1@?.%d*0+ya%R7!MI%Rf:V3BA\'&+J%RDr]^Oi3B:Áe¦©¨ª9¦8Ç¥`¦[²~§¢Hm}])]^OX*l%'(
`
143c1@?.%\93BDr]2A.1b&H1>*b3B+Q3[ZE1@?.%·*0+ya%R7!MI%9fe*>1e:s*l%8O(HME1@?C&H1 −1 b1@?.%%R+21>78:j3[Z −1 *0+/7R3B;
&+(
Aij
A
i
\93OPACD
+2M h*,M-#*,a%R+T8:
Hint:
j
A−1
ij
=
(−1)i+j
°~9
°~9
(Aji )
,
(A)
;?.%R7R%u°~9
*>M·1@?.%(~%814%R78D
*,+&+213[ZW&
Mz8A^&7R%DF&H1>78*_
f
&+( ij *>M·1@?.%
DS&H1>78*_
(M)
M
A
2 2
3T!1b&*0+`%'(·Z'7R3BD
T8:(~%8O_%81>*,+.-h7R3B;
&+(j\93OPACD
+ m
A
x3S\93BDW]2AC14%g
1@?.%(~%814%R78D
*,+&+21d3[jZW&
DS&H1>78i*_Hfe:V3BADh*i-?)1;&+21
143
A.MI%r1@?.%;%8O,OXU
3 3
GI+`3B;=+ ¨¦b¦[²~RÇ)¦[²~§¢sm
¼ ½'¼ " ½'¼ ¤ ½
78*>14%/&F]27R3'-B79&D
1@?C&H1W7R%&)(HMÆ&<MI%'zRAp%R+`\'%<3[Z
*0+214%l-)%R7!MrZ97R3BD
read_array
MR1b&+()&79(*0+]2A.1p*0+2143g&+j&7879&:~m
x?.%+yACDSTR%R7
*>M1@?.%0e7!MR1*0+]2A.1>f&+(r1@n
?.%R+1@?.%]27R39-#79&D
%!].%9\81@M:V3BA 143J*,+]2AC1c&+`31@?.%R7
a&HOXA{%8Mm }enZR14%977R%&)(*,+.- 1@?.%
a&HOPAp%8M'f1@?.%
]27R3'-B79&D
n
MR?.3BACO_(Æ3BA.1¯]2AC1u1@?.%9D *0+1@?.%
M&DFn%S3B7'(~%R7#m Z:V3BA¾\'&+ (~31@?*,M9f
:3BA ?C&a%·]27R3Ba%R+L1@?C&H1
:V3BA &7R%+`3ÆO_3B+.-)%R7& \93BDr]^Oi%R14%Y+`3Ba#*b\'%Rf&~\9\93B7'(*,+.-Æ143/q21>7R3BA.M91>78As]`m |3B7%©~&DW]^O_%Rf3B+
*,+]2AC1
1@?.%]27R39-B7'&D MR?.3BACO_(F3BA.1¯]2AC1
m
¼ ½'¼ " ½
Exercise 59
5 4 3 6 1 2
4 3 6 1 2
Ë+2?C&+`\'%1@?.%u]27939-B79&D
Z'7R3BD ËV%R79\R*>MI% MI3h1@?C&H11@?.%g7R%RM9A.OX1@U
read_array.C
*,+.-]27R39-B7'&D
MI3B7!1@M1@?.%Q&7879&:%8O_%RD%R+21@M*,+2143&HMI\'%R+(*,+.-63B79(~%R7T9%>ZI3B7R%
3BA.1¯]2AC1@1>*,+.-h1@?.%Rsort_array.C
DFmY3BAC7rMI3B7!1>*,+.-S&HO -)3B78*>1@?D (~3#%8M+`31?C&a%W143FT9%u].&7!1>*l\RA.O&7!OP:%>6\R*l%R+21>f
1@?.%cDF&*,+1@?*,+.-?.%R7R%c*>M1@?C&H1*>1u;3B7!G#MY\'3B787R%9\81@OP:~m¾x%8M91:V3BAC7]27R39-B7'&D 3B+MI3BD%cO&7b-)%R7
*,+]2AC1@M i]27R%>ZI%979&)T!OP:F7R%&)(·Z9793BD 6
& =Oi%Rf&©ZR14%97k7R%'(*07R%9\R1>*,+.-FMR1b&+()&79(h*,+]2A.1 m·|`3B7%~&Dr]^Oi%9f
3B+<*0+]2A.1
1@?.%u]27R3'-B79&D M9?.3BA.O(F3BAC1¯]2A.1
m
¼ ½'¼ " ½'¼ ¤ ½
Exercise 60
5 4 3 6 1 2
1 2 3 4 6
Z97R3BDÍË~%R7R\R*,MI% EMI3E1@?C&H1{1@?.%
7R%8M'A.OX1>*,+.-
Ë+2?C&+`\'%1@?.%]27R39-B79&D
Exercise 61
]27R39-#79&D
*,+214%R74]279%81@M1@?.%Eread_array.C
*,+]2AC1eMI%'z8A{%R+`\9%3[Z
*,+214%-)%R7!Mk&HMr&Y.9¦[ªr²~[¨[¡¢B
3[Z
cycles.C
n
π
f&+(1@?C&H1
*>13BA.1¯]2A.1@Mr1@?.%c9»9§¢d°~RRBªk.B4¡¯[¡¢BJ3[Z m
{0, . . . , n − 1}
q`3BD%j%©!]^O_&+&H1>*l3B+2MS&7R%
*,+63B7'(~%R7 Fj&]y%978DhA.1b&H1>*l3B+
*>MY&<TRπ* o#%'\81>*,a%DF&8])]2*0+.-kZ9793BD
1@?.%·MI%R1
143*>1@MI%RO Z1@?.%R7R%,ZI3B7R%Rf=1@?.%d*,+]2A.1eM%'z8A{π%R+`\9%\&+ T9%E*,+214%974]27R%814%'(S&HME1@?.%
{0, . . . , n − 1}
MI%z8Ap%R+`\'%j3[Za&HOPAp%8M
3[Z&
]y%R78D
A.1b&H1>*b3B+
* Z&+(<3B+2OP:*¥Z*,1W\93B+21b&*0+2M
π
%Ra%978:S+yADFT9%R7Z9793BD π(0), . . . , π(n −%~1)&~\R1@OX:/3B+`\9%m
{0, . . . , n − 1}
x?.%c]27R39-B7'&D
MR?.3BACO_( e7!MR1h\8?.%'\8G<;?.%81@?.%R7/1@?.%j*0+]2A.1WMI%'z8A{%R+`\9%/MN&H1>*>M%8M
cycles.C
1@?*>MF\93B+(*>1>*l3B+yf&+(/*¥Zh+`31>fr14%R78D
*,+&H14%;=*>1@?¾& 9\ 3B7879%8Ml]y3B+(*0+.-<DF%8MRM&B-)%m Z1@?.%Y*0+]2A.1
*,+(~%'%'(S%R+`\'3I(~%8Mk&E]y%R78D
A.1b&H1>*l3B+ f1@?.%]27R39-B79&D MR.
? 3BA.O(Y3BA.1¯]2AC1e1@?.%k9»R§¢°~R9BªkyB4¡¯[¡¯B
π
3[Z m} \R:V\8O_%g*,+
*>M&+y:MI%z8Ap%R+`\'%3[Zr1@?.%Z3B78D
M9Ap\R?F1@?C&H1
π
( n 1 n2
π
n2 = π(n1 ),
n1
n3 = π(n2 ),
...,
*,MW1@?.%gM9DF&HO0Oi%RMR1%ROi%RDF%R+21d&D3B+.-
nk = π(nk−1 )
n1 , . . . , n k
f&+(
nk )
n1 = π(nk )
f&+(
m
}+y:\R:V\8Oi%WAC+y*z8Ap%8OP:j(~%814%R78D
*,+`%8MW1@?.% Ulas&HOXA{%8Mc3[Zk&HO0O*>1@M%8O_%RD%R+21@Mu3B+<1@?.%h31@?.%R7?C&+(f
%Ra%978:%8O_%RD%R+21e&8])]y%&7!M*,+SMI3BD%·\9:\8O_% π b;?*b\8?kD
*0-?)1T9%r3[Z1@?.%1>78*,a#*&HOZI3B78D
f`D%&+2U
(n1 )
*,+.-Y1@?C&H1
mFx?*>Mr*,Dr]^OX*l%8Mg1@?C&H11@?.%d].%R78DhAC1b&H1>*b3B+L(~%9\'3BDW]y3MI%RMg*,+2143j&YA+y*lz8A{%
π(n1 ) = n1
MI%81u3[Z\R:\ROi%8MNm·|`3B7h%)&DW]^O_%Rf1@?.%u]y%R78D
A.1b&H1>*l3B+
π(0) = 4,
π(1) = 2,
π(2) = 3,
(~%9\'3BDW]y3M%8MW*0+21431@?.%k1>;3j\9:\8O_%8M
(04)
π
-B*0a%R+T8:
π(3) = 1,
&+(
π(4) = 0
(123)
t3B+2M'*l(~%R7
1@?.%cMR1>78*,+.-FDF&H14\8?*0+.-&HO -)3B78*,1@?D
m
¼
3[Z 7939-B79&D
½'¼ " ½¼ ¤ ½
Vm =7R3Ba%
1@?C&H1Z3B7
Exercise 62
&HO,O
fe1@?.%R79%
%*>MR1@Mg&
MI%&7R\8?SMR1>78*,+.3[ZEO_%R+.-1@?
&+(&
14%s1 3[ZEO_%R+.-1@?
m > 1, n m
s
m
3B+;?*b\8?Y1@?.%W&HOP-)3B78*,1@?D *0+ 7R3'-B79&D ]y%97@ZI3B78DM
\'3BDW].&78*,MIt3B+2MWT9%81>;%9%Rn
+
m(n − m + 1)
M9*0+.-Oi%
\8?C&79&~\814%97!Mm
t3B+2M'*l(~%R71@?.%`Z3O,O_3B;*0+.-]27R39-#79&D
M9*l3B+&HO&7879&:Vm
Exercise 63
¼ ½
1@?C&H1(~%)e+`%8Md&+(r*,+y*,1>*l&HOP*s%8M&W1@?7R%9%(*,D%9+2U
# include < iostream >
int main ()
{
int a [4][2][3] =
{ // the 4 elements of a:
{ // the 2 elements of a [0]:
{2 , 4 , 5} , // the three elements
{4 , 6 , 7} // the three elements
},
{ // the 2 elements of a [1]:
{1 , 5 , 9} , // the three elements
{4 , 6 , 1} // the three elements
},
{ // the 2 elements of a [2]:
{5 , 9 , 0} , // the three elements
{1 , 5 , 3} // the three elements
},
{ // the 2 elements of a [3]:
{6 , 7 , 7} , // the three elements
{7 , 8 , 5} // the three elements
}
};
of a [0][0]
of a [0][1]
of a [1][0]
of a [1][1]
of a [2][0]
of a [2][1]
of a [3][0]
of a [3][1]
return 0;
}
78*>14%<&j]27939-B79&D
1@?C&H1%R+2?C&+`\9%8M1@?*>Mc]27939-B79&D T8:L& b+`%8MR14%( threedim_array.C
O_3#3R]1@?C&H1*,14%R79&H14%8M3Ba%R7r
1@?.%&7879&:
&+(
*>1@M·M9A^T9&7879&:sM·143F3BAC1¯]2A.1&HO,O^1@?.%
a&HOPAp%8M
a
int
1@?C&H1k&7R%SMR143B7R%(*0+
&+(Æ*,1@MYM9A{T'&7879&:MNm3+`31rACMI%79&+(~3BD &~\'\9%8M9MS1435(~3/1@?*,MT8A.1
]y3B*0+214%R7h&78*>1@?DF%81>*b\m a
¼ ½
`©
È
78*>14%/&S]27939-B79&D
1@?C&H1W7R%&)(HM/&14%s1Z97R3BD MR1b&+()&7'(<*0+]2A.1
frequencies.C
Æ&+(53BA.1¯]2AC1@M
1@?.%uZ97R%z8Ap%R+`\9*b%8Mj3[Zc1@?.%YO_%81@14%R7!Mh*0+L1@?.%14%©s1>f·;?.%R7R%
;%h(~3+`31d(*,MR1>*,+.-BA*>MR?TR%R1>;%'%R+¾O_3B;%R7&+(YAH])]y%R7\&HMI%O_%81@14%R7!MmW|`3B71@?*>Mc%V%R79\R*>MI%9f:3BA
DF&:&HMRM9ACDF%c1@?C&H1d1@?.%
1>:N]y%
*,DW]^O_%RDF%R+21@M}Eqt
%R+`\93(*,+.-mx?*,MD%'&+2Mc1@?C&H1r&HO0O
char
\8?C&79&~\R14%R7!Mk?C&a%k*0+214%l-)%97cas&HOXA{%8MW*0+
m J3B7R%93Ba%R78f*,+}·qt f1@?.%ka&HOPAp%RM
3[Z
127}
1@?.%
AH])]y%R7
\'&HMI%WOX*,14%R79&HOXM
As]<143{0, 1, . .&.7R,%c
\93B+2MI%'\RA.1>*0a%g+yADFT9%R7!Mr*0+
.ZI3B7
26
’A’
’Z’
{65, . . . , 90}
1@?.%kO_3B;%R7\&HMI%gOP*>14%979&HOM
As]J143
f1@?.%ra&HOPAp%g7'&+.-)%g*,M
m
¼ Ƚ
’a’
’z’
{97, . . . , 122}
²~~~¡¢~ºg[~¡¢
B4Vd§¯»¦[¡¯R
B³%8MR14%979()&:Ƽ ¿ ~ R¨[§¢R[½³#¦'µ)¨IªkV§¢4~B²V§¯°»¡¢R§¯°h[~
³B§¢§¢!¬¡¯Vº·B²)4V²) £
Exercise 64
4OP*>G%
*,+ =R7 39-#79&D
Frequencies:
a:
45 of 520
b:
5 of 520
c:
5 of 520
d:
28 of 520
e:
65 of 520
f:
4 of 520
g:
13 of 520
h:
27 of 520
i:
j:
k:
l:
m:
n:
o:
p:
q:
27 of 520
0 of 520
3 of 520
20 of 520
10 of 520
30 of 520
43 of 520
4 of 520
0 of 520
r:
s:
t:
u:
v:
w:
x:
y:
z:
Other :
19 of 520
36 of 520
31 of 520
9 of 520
6 of 520
19 of 520
0 of 520
34 of 520
0 of 520
37 of 520
2.6.16 Challenges
x?.%Z&~\81e1@?C&H1
&+J&787'&:h?C&HM>V%'(cO_%R+.-1@?Y*>Mr3[ZR14%R+*0+`\93B+ya%9+y*b%R+21bmE|3B7g%~&DU
]^O_%Rf=*,+JËV%R79\R*>MI% F&+(h*,+5ËV%R7R\9*>MI%Bf=1@?.%g+yACDSTR%R7h3[Zc%ROi%RDF%R+21@Mg143FTR%g79%'&)(Y*0+2143Y1@?.%
&7879&:Æ?C&)(143JT9%W]27R3BaI*l(~%'(5&HMc1@?.% e7!MR1*,+]2AC1d*,+63B7'(~%R7EZI3B71@?.%W]27R39-#79&D 143JT9%F&)T!O_%Y143
(:H+&Dh*b\&HO,OP:Y&HO,O_3#\'&H14%k&+J&7879&:3[Zu1@?.%g&8])]27R3R]278*&H14%·Oi%9+.-1@?CmunA.1*,+
]279&~\81>*b\'%Rf=1@?.%·O_%R+.-1@?
3[Zr1@?.%W*0+]2A.1MI%'z8A{%R+`\9%g*>M3[ZR14%R+J+`31GI+`3B;=+¾&g]278*l3B78*lm
<%;3BA.O(51@?.%R79%>ZI3B7R%OX*,G%j143;=78*>14%&F]27R39-B7'&D 1@?C&H1g79%'&)(HM&5MI%z8Ap%R+`\'%J3[Z*,+214%-)%R7!M
Z9793BD MR1b&+()&79(S*0+]2A.1*,+2143&+L&7879&:Hf;?.%R7R%1@?.%O_%R+.-1@? 3[Zk1@?.%MI%z8Ap%9+`\9%*>Mg+`31GI+`3B;=+
TR%,ZI3B7R%8?C&+( &+(+`31C].&7!13[Z
1@?.%
*,+]2A.1 1@?.%]27R39-#79&DMR?.3BACO_(EM9*,Dr]^OX:7R%&)(3B+`%+yACDSTR%R7
&©ZR14%97
&+`31@?.%R7kA+21>*>O`1@?.%gMR1>7R%'&D TR%'\93BD%RMh%RDW]^1>:~m
+`%Y]y3M9M9*lT!O_%MR1>7'&H14%l-B:¾*,Mj143L(:s+&D
*b\&HO,OP: &HO0Oi3#\&H14%J&+w&7879&: 3[ZO_&7l-)%ÆOi%R+.-B1@?fST8*i%R+`3BAV-?143YM9143B7R%
&+y:]y3MRM'*lT!O_%W*0+]2A.1MI%'z8A{%R+`\9%mrnA.1* Zr1@?.%kMI%z8Ap%R+`\'%k*>MrMR?.3B7!1>f1@?*>M*>M&
?A-%c;&HMR14%3[ZkDF%RD3B78:HfE&+(F*¥Z1@?.%cMI%z8Ap%R+`\'%
*,Mka%R78:/O_3B+.-Bf1@?.%Y&7879&:jD
*0-?)1MR1>*>O0O+`31
TR%gO_&7l-)%h%R+`3BAV-?Cm
Exercise 65
& 78*>14%&]27R39-#79&D
1@?C&H17R%&)(HMk&hM%'z8A{%R+`\9%c3[ZE*,+214%-)%R7!M3[ZEA+2GI+`3B;=+
read_array2.C
O_%R+.-1@? *,+2143L&+w&7879&:HfS&+(1@?.%R+À3BA.1¯]2AC1@Mj1@?.%ÆMI%'z8A{%R+`\9%m x?.%]27R39-B7'&D MR?.3BA.O(
M&H1>*,M,Z9:1@?.%
ZI3O0Oi3B;=*0+.-1>;3W]2793R]y%R7!1>*b%RMm
b* x?.%L&D3BA+21/3[ZQ(:s+&D
*b\&HO,OP: &HO,O_3#\&H14%'(6DF%RD3B78: *,+ A.M%¾T8:61@?.%]27R39-#79&D
9M ?.3BA.O(Y&H1
&+y:h1>*0D%kTR%gV¦4#y#¦4[¡¢BV¨I§)[E4V
²~ªr±.9¦eB³y4R¸s²~R~RR§¢RªRH[4¨N
V¨R®±yRRc¦[8¨I°c4³_¨¦Imcx3YT9%c\'3B+`\R7R%814% F1@?.%R7R%DhACMR1TR%&]y3M9*,1>*,a%\93B+2M91b&+21
a
È 'M Ap\8?j1@?C&H1+`3D3B7R%g1@?C&+
\9%RO,OXMh3[Z(:s+&D
*b\'&HO0OX:j&HO0Oi3I\'&H14%'(SDF%RD3B78:&7R%W*,+
ak
ACMI%g;?.%R+
%8O_%RD%R+21@Mg?C&a%cT9%9%R+ 7R%&)(f
m<%g79%>ZI%R71431@?*>M]27R3R]y%R7!1>:&HM
k
k 1
lC¨Rd gR¡¢R~9»^m 1u%9+2M9AC7R%RMg1@?C&H1d%Ra%R+5a%R78:SO_3B+.-YMI%z8Ap%R+`\'%8Mh\&+TR%k79%'&)( bAH]
1431@?.%
&8])]^OP*b\'&)T8Oi%WD%RDF3B78:FOP*,D
*>1@M #fTRA.11@?C&H1M9?.3B7!1
MI%z8Ap%R+`\'%8M\93B+2M'ACD%
3B+2OX:
OP*>1@1@O_%kDF%RD3B78:~m
b*,* x?.%h+yADFT9%R73[ZY&HMRM9*0-#+yD%R+21@M 93[Za&HOPAp%8M
143<&7879&:5%8O_%RD%9+21@M ]y%R7@Z3B78D%(/MI3
ZN&7MR?.3BA.O(k&H1&+y:g1>*,D%uTR%]27R3R]y3B7!1>*l3B+&HOC1431@?.%+yADFTR%97r3[Z
MI%'zRAp%R+`\'%r%ROi%RDF%R+21@M
1@?C&H1?C&a%YTR%'%R+79%'&)(MI3Z&78f;=*>1@?Æ1@?.%M&DF%cDF%'&+y*0+.-3[Zu]27R3R]y3B7!1>*b3B+&HOP*>1>:Æ&HM
&)T93Ba%Imh<%7R%>Z%R71431@?*>M]27R3R]y%R7!1>:c&HM[¡¯ª kR¡¢9V'»{m 1%R+2M9A7R%8M1@?C&H1`1@?.%]2793U
-#79&D *,Mc3B+2OP:T8:j&j\'3B+2MR1b&+21Z&~\R143B7kMRO_3B;%R71@?C&+51@?.%]27R39-B7'&D
read_array.C
1@?C&H1
GI+`3B;Mg1@?.%WMI%'z8A{%R+`\9%O_%R+.-1@?F*,+&)(as&+`\9%Im
T
%814%R78D
*,+`%1@?.%E\'3B+2MR1b&+21@M·3[Z]2793R]y3B7!1>*b3B+&HOP*>1>:
Z3B7]27R3R]y%R7!1>*l%8M b* g&+( b*0* k3[Z:3BA7
a
]27R3'-B79&DFm
|`3B7O&7b-)%R7u3#3B7!M9f 7R3'-B79&D
Æ\'&+6T9%9\93BDF%jz8AC*,14%
*0+`%>6\R*l%R+21>f·M9*0+`\9%F%Ra%R78:
Exercise 66
MR14%b]
%~&D
*,+`%8MS¨I§¢§E\'%8O,OXMF3[Z1@?.% d3#3B7
*,+ 3B79(~%R7Y143 e+(/1@?.% i]y3MRM9*T!OX:a%R78:ZI%R; 3B+`%8M
i
1@?C&H1d?C&a%
143ÆTR%
O_&)T9%8O_%'(;=*>1@?
*0+¾1@?C&H1MR14%b]`mY} TR%81@14%97MI3OXAC1>*b3B+ ;3BA.O(T9%143Æ%~&D
*,+`%
i
3B+2OP:1@?.%
+`%9*0-?CT93B7!M3[Z1@?.%\'%8O,OXM
1@?C&H1·&7R%&HOX79%'&)(:/O&)TR%8O_%'(;*,1@?
fM9*0+`\9%3B+2OP:/1@?.%8MI%
i−1
&7R%
\'&+(*l()&H14%RMZ3B7W-)%81@1>*0+.-O&)TR%8O m
i
78*>14%&r]27939-B79&D
1@?C&H17R%&HOX*
s %8M1@?*>M·*(~%'&f
&+(
D%&HM9AC7R%W1@?.%
shortest_path_fast.C
]y%R7@Z3B78DF&+`\'%W-&*0+¾3B+JMI3BDF%gO&7b-)%97d3#3B7!M3[Z:3BA7
\R?.3B*b\9%m
x?.%
=O_%ZI3B78DS&H1*>MW&Z3B78DF&H1.Z3B7MR143B78*,+.-DF3B+`3#\8?7R3BDF%
'T!O&~\8G ;?*,14% *,DS&B-)%8Mm/x?.%Z3BXBM
78DF&H1*>MkM3BD%R;?C&H1·3BA.1b()&H14%(fET8A.1DF&+y:ÆT87R3B;MI%R7!M +214%R78+`%81dË!]^O_3B7R%R7
*>M&+`31b&)T8Oi%
%V\9%l]^1>*b3B+ j\&+5MR1>*,O,O(*>M]^O_&:*0DF&B-)%RMr*0+
ZI3B78DS&H1bm
XBM
}+
*,DS&B-)% =O_%gZ3B7&+ *,DF&B-%+&D%(
Dh*i-?)1gO_3#3G<OP*>Gs%j1@?*>M 41b&HG%9+JZ97R3BD
test
*>GI*X]y%'(XBM
*&`Ì M
].&B-)% m
Exercise 67
XBM
# define test_width 16
# define test_height 7
static char test_bits [] = {
0 x13 , 0 x00 , 0 x15 , 0 x00 , 0 x93 , 0 xcd , 0 x55 ,
0 xa5 , 0 x93 , 0 xc5 , 0 x00 , 0 x80 , 0 x00 , 0 x60 };
}M:3BAL\&+-BAp%RMRMZ97R3BD 1@?*>M9f
=O_%8MY&7R%S(~%RM9*0-B+`%(/143T9%h*0+214%l-B79&H14%(Æ*,+21435tÍ&+(
XBM
t vWv MI3BA7R\9%c\93I(~%W;?*b\8?DF&HG%RMr*,1u
%'&HM':143W]27R3#\'%8MRMr1@?.%RD 41@?.%R7R%r*>M·+`3h+`%'%'(S143c7R%'&)(*,+
1@?.%()&H1b& dM9*0DW]^OP:j*,+`\ROXA^(~%
1@?.%.=O_%uZ'7R3BD 1@?.%jtvrv ]27R39-B79&D 1@?C&H1u+`%'%'(HMc143
]27R3I\9%8MRM
1@?.%
*,DS&B-)% m +3BAC7h%©~&DW]^O_%Rf
&+(
(~%R+`314%g1@?.%W;=*(H1@?Æ&+(?.%R*0-?)1
test_width
test_height
3[Z1@?.%*,DS&B-)%W*0+S]2*V%8OXMmu|`3B78DF&HO,OP:Hf=1@?.%8MI%r+&D%8Mk&7R%cª¨I9¦4B9f
T8AC1*0+<1@?.%]27R39-B7'&D 1@?.%9:
\'&+ T9%A.MI%(QOX*,G%J\'3B+2MR1b&+21Y%!]27R%8M9M9*b3B+2Mm
*>M/&+ &7879&: 3[Z\8?C&7'&~\814%R7!M1@?C&H1
%R+`\'3I(~%8M1@?.%j\93O_3B7!Mj3[Z
1@?.%
]2*_V%ROMh*0+ test_bits
1@?.%*,DS&B-)%ImJËa%978:¾~'µ~¨°V9R¡¢ª¨I§§¢¡¯49¦©¨I§3[Z
7
1@?.%ZI3B78D
%R+`\'3I(~%8M%R16
*0-?) 1]2
*V%8OXM9f;?.%R7R%c1@?.%Y3B79(~%R7c*>MW7R3B;ÍT8:F7R3B;m + 3BA7Y\'&HMI%9f
&+( 0xd1 d%R2+`\'3I(~%r1@?.% u]2*_~%8OMW3[Zd1@?.*
% e7!MR17R3B;=f;?*>O_%
&+(
&7R%Z3B71@?.%
0x13
0x00
0x15
0x00
MI%'\93B+(Y7R3B;=f%814\Im
`©
È
g%R7R%*>M=?.3B;&d1>;3U(*0-#*>1?.%)&)(~%9\R*0DF&HO)OP*>14%R79&HOy%R+`\'3I(~%8M1@?.%u\'3Oi3B7!M3[Z%R*0-B?)1\93B+2M%9\RAC1>*,a%
]2*_~%8OM
;*,1@?*,+¶&/7R3B;m Ë=a%R78:<?.%~&)(~%9\9*,DF&HO(*0-B*,1
*>MdZ'7R3BD 1@?.%M%81
di
{0, ..., 9, a, . . . , f}
;?.%R7R%
As]J143
MR1b&+(dZI3B7
m
x?.%&~\81>A{&HO`+yACDSTR%R7h%R+`\93I(~%(T8:
&Y?.%)&)(~%9\R*0DF&HO
f
10, . . . , 15
OP*>14%R79&HO`a*,M
m |`3B7h%~&Dr]^Oi%9f
?C&HM·a&HOPAp%
m
16d1 + d2 {0, . . . , 255}
0x13
1 15 + 3 = 19
g3B;=fh&+y: +yACDSTR%R7*0+
?C&HM/&T8*,+&78: 7R%b]279%8MI%R+21b&H1>*l3B+ ;=*,1@?
T8*,1@Mm
f
ZI3B7Y%©~&DW]^O_%Rf?C&HMcT8*,+&78:S7R{0,
%b]27R.%R.MI.%R, +2255}
1b&H1>*b3B+
mSx?.%d]2*V%8O=\93O_3B7!M
&7R%Y38T!1b&*0+`%'(/19
T8:
7R%&)(*,+.-1@?*,MT'&~\8GI;&79(HM9f&+(*,+214%974]27R%81>*,+.- 00010011
&HMT8O_&~\8G&+(
&HM;?*>14%Imx?ACM9f1@?.% e7!MR1
1
0
%R*i-?)1]2*_~%8OM*,+7R3B;
3[Z1@?.%
*,DS&B-)%
&7R%T!O&~\8GIfT!O&~\8GIf=;?*>14%Rf;?*>14%RfT!O&~\8GIf;?*>14%Rf
;?*>14%Rf=;?*>14%mx?.%
\'13BDW]^O_%814% test *,DS&B-)%gO_3#3G#MrOP*>G%g1@?*>M F
test
78*>14%E&]27R3'-B79&D
1@?C&H1
M&+
=Oi%E3[Z:V3BAC7E\8?.3B*l\9%
l:3BAcDF&:rMI%&7R\8?
xbm.C
#include
XBM
1@?.%;%ITW143!e+(
M9A*>1b&)T!O_%
=O_%8M Bf&+(h1@?C&H13BA.1¯]2AC1@Mg&+
=Oi%=Z3B71@?.%WMN&D%·*,DS&B-)%Rf
XBM
¦[#©¨N[R°
±s» °~Rº#¦4RRmhx?.
%]27R39-#79&D DS&:;=78*>14%W1@?.%W79%8M9A.OXXBM
1>*,+.-!=O_%g143
MR1b&+()&79(3BA.1¯]2A.1bm
+5\'&HM%3[ZE1@?.%
*0DF&B-)%9fe1@?.%E7R%8M'A.OX1>*,+.=O_%g&+(c1@?.%·7R%RM9A.OX1>*,+.-7R31b&H14%(h*0DF&B-)%W&7R%
test
XBM
&HM=ZI3O,O_3B;Mm
# define rotated_width 7
# define rotated_height 16
static char rotated_bits [] = {
0 x3c , 0 x54 , 0 x48 , 0 x00 ,
0 x04 , 0 x1c , 0 x00 , 0 x1c ,
0 x14 , 0 x08 , 0 x00 , 0 x1f ,
0 x00 , 0 x0a , 0 x15 , 0 x1f };
g314%r1@?C&H1e;%+`3B;?C&a%
*,+2MR14%&)(3[Z ?.%)&)(~%9\R*0DF&HOpOP*>14%979&HOMNmhx?*>ME*,MW(Ap%143
1@?.%
Z&~\R11@?C&H1
%'&~\R?3[Z1@?.% W793B;M+`%9%(HMg3B+`%EOP*>14%R7'&HOZ3B7d*,1@M ]2*V%8OXM9f;?.%97R%·1@?.%EO_%'&)(*0+.-hT8*,1@M
3[Zr1@?.%cTR*,+&78:7R%b]27R%RMI%R+21b&H1>*b3B+2Mc&7R%
T9%R*,+.-h*0-B+`3B7R%()m
3BADF&:S%s14%9+(h:V3BAC7]27R39-#79&D 143·]y%R7@ZI3B78D 31@?.%R7WGI*,+(HMg3[Zu*,DS&B-)%]27R3#\'%8MRM9*0+.-h1b&HM9G#M
3[ZY:V3BAC7Æ\8?.3B*b\'%Im Ë)&DW]^O_%8MS*0+`\8OPA{(~%Æ\93O_3B7*,+ya%R7!M9*b3B+ b7R%l]^O_&~\'%T!O&~\8G/;*,1@?;?*>14%9f
&+(
a#*l\9%a%R7!MN& BfE\93BDr]2A.1>*0+.-&FD
*,787R3B7*0DF&B-)%9fMI\'&HOP*,+.-S1@?.%*0DF&B-)% bMI31@?C&H1*>1E3#\'\RAs]2*l%8MOi%RMRM
3B7gDF3B7R%u]2*V%8OXM Bf%814\m
$
3?$&'5J$
1)$
$
(+&
3
$
(
"01>:9KHH@>3
/$%"AKG(K
K"#11(#I1+K"
3() 9
$@1" 0$159
+
HH)(+
3
G88 1()5G<
-B/
char
$N+41JID()"?
$0";'1""K9%1:"?$N2QH(+NI1+K
{−128,
. . . , 127}
α
&'$)$ $N
"M$@#")+9: (("; *K5(7 &7O "'19%@9:;<
$@1"?I1+K@2(+8D
α − 256
()8D(
© Copyright 2026 Paperzz