arrays in c - mathunipdtullio/is-1/2004/approfondimenti/a-vetto… · 1 array pitfalls in c !...

4
1 Array Pitfalls in C Arrays in C C "Arrays" are Just Pointers: No Safety #include <stdio.h> #include <string.h> char x [4] = {'A', 'B', 'C', 'D'}; char y [4] = {'E', 'F', 'G', 'H'}; char z [4] = {'I', 'J', 'K', 'L'}; int main () { char *p; display(); p = x; memcpy (p, "0123456789", 10); display (); x [6]= '?'; display (); } void display_arr (char *name, char *arr, int n) { int k; printf ("%s = ", name); for (k = 0; k < n; k++) printf ("%c", arr [k]); printf ("\n"); } void display () { display_arr ("x", x, 4); display_arr ("y", y, 4); display_arr ("z", z, 4); printf ("------------\n"); } What Does the C Standard Say? What Happens in Practice What Happens in Memory: Allocation

Upload: others

Post on 30-Sep-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Arrays in C - MathUniPDtullio/IS-1/2004/Approfondimenti/A-Vetto… · 1 Array Pitfalls in C ! " # $ % & ' * +,-. / 0 1 2 3 4 5 6 7 8 9:; < =>? @ A B C D E Arrays in C FHGJI

1

��� � ��� � � � � � � � � � � � � ��� � � � � � � � � � � � � � � � � � � � � �

Array Pitfalls in C

�� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0 1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

Arrays in C

FHGJI KMLMNMLOI I LMPMQSR TJU

VHTJLMI I LOPWR QSX YZQO[ZLW\]GZR TZ[ KOI^[ G_LS`MaZY]TZbSGZc]d_KOd_G]I P

egf h i�j k�l�mon�p q lrf s�t u v

w x�y{z]| f ho} ~���r���r��� p q ����� ��k�� �r� �

� � f h q ��} � �^i � h�� �Z�^� p q � � ~ �� � f h q ��} � �^i � h�� � � } p q � ��� ~ ~ �� � f h q ��} � �^i � h�� � � } ���rp q � ~ ~ �� � f h q ��} � �^i � h�� ��p q �r� ��� ~ �

�� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0�1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

C "Arrays" are Just Pointers: No Safety

#include <stdio.h>#include <string.h>

char x [4] = {'A', 'B', 'C', 'D'};char y [4] = {'E', 'F', 'G', 'H'};char z [4] = {'I', 'J', 'K', 'L'};…int main () {

char *p;

display();p = x;memcpy (p, "0123456789", 10);display ();x [6]= '?';display ();

}

void display_arr (char *name, char *arr, int n) {

int k;printf ("%s = ", name);for (k = 0; k < n; k++)

printf ("%c", arr [k]);printf (" \ n");

}

void display () {display_arr ("x", x, 4);

display_arr ("y", y, 4);display_arr ("z", z, 4);printf (" ------------ \ n");

}

�� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0 1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

What Does the C Standard Say?�i�u | �� o� ¡����¢� £ ¤O£ ��£ ¥{£ ��£ ¦M£ ��£ §¨£ � �i�u | ���o� ¡����¢� £ ©�£ ��£ ªr£ ��£ «Z£ ��£ ¬¨£ � �i�u | ��­]� ¡����¢� £ ® £ ��£ ¯�£ � £ °�£ ��£ ±�£ � ��f h q z]| f ho} ~��i�u | � � � �

l�f p � j | ��} ~ �� �o r�

z m z i � �]} � � � �g� ����¡�²r³ ´rµ�¶�� ��� ��~ �l�f p � j | �^} ~ �

 o� ³�� ��£ ·r£ �l�f p � j | �^} ~ �

¸{¹�ºg»g¼ y{w º¢» xr½ ¹�¾ w x ¹ ½ º w x � ¹o¿ w º �ÀrÁ w x�y ¹ � y ��� y ÀrÁ w x�y º y Á¢ÂO��Á x º�¹ � » y � w à ¹Àg� ¹ � ¼ ¼ Ág� � y ¹ ½¢Ä�Å�y ¹�º w x¢Æ ¹ Æ Á�� Å�Ç�x Á y�È��Á Æ À w ¼ ¹ � w º]¾ � ¹�¹ y Á ½ ÁoÉo��� y{w y ÉZ� x�y º

Ê ¹ y À y Á y � ¹ � ½g½ � ¹�º�º Á ¾�¿

Ë Á�À ÅÍÌ ÎrÏ Ð�Ñ Â�Ò�Ó È�Ô�Õ�ÌMw xoy � ¹Ï Î ��Á x º�¹ � » y w à ¹ Æ ¹ Æ Á�� ż Ág� � y w Á x º ÀrÁ w x�y ¹ ½�Ä�Å À

Ö� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0�1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

What Happens in Practice

� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0 1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

What Happens in Memory: Allocation

egf h i�j k�l�mon�p q l�f srt u�vegf h i�j k�l�mon�p q � f h �gt u�v

�r���g� ¿¢Ø Â�Ù�Ú^Û Ü ÝOÜ Ç Ü Þ¨Ü Ç Ü Ë Ü Ç Ü ßMÜ à á�r���g� Å Ø Â�Ù�Ú^Û Ü â�Ü Ç Ü ãgÜ Ç Ü ä]Ü Ç Ü åMÜ à á�r���g�gæ Ø Â�Ù�Ú^Û Ü ç Ü Ç Ü ègÜ Ç Ü é¨Ü Ç Ü êgÜ à á�f h q z]| f ho} ~��i�u | � � � �

l�f p � j | ��} ~ �� �o r�z m z i � �]} � � � �g� ����¡�²r³ ´rµ�¶�� ��� ��~ �l�f p � j | �^} ~ � o� ³�� ��£ ·r£ �l�f p � j | �^} ~ �

ëìíîïðñ òóôõö÷ ø ù ú÷ ø ù úû ø ü úý ø � úý ø � úý ø ü úý ø ù ú ÷ ø � ú÷ ø � úû ø � úû ø � úû ø � ú

Page 2: Arrays in C - MathUniPDtullio/IS-1/2004/Approfondimenti/A-Vetto… · 1 Array Pitfalls in C ! " # $ % & ' * +,-. / 0 1 2 3 4 5 6 7 8 9:; < =>? @ A B C D E Arrays in C FHGJI

2

þ� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0�1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

Pointer Copyegf h i�j k�l�mon�p q lrf s�t u vegf h i�j k�l�mon�p q � f h��rt u v

i�u | �� ^� ¡������ £ ¤M£ ��£ ¥{£ ��£ ¦O£ � £ §¨£ � �i�u | ���^� ¡������ £ ©�£ ��£ ªr£ � £ «Z£ � £ ¬¨£ � �i�u | ��­o� ¡������ £ ® £ � £ ¯�£ ��£ °�£ � £ ± £ � ��f h q z]| f ho} ~��i�u | � � � �

lrf p � j | ��} ~ �À¢Ú ¿ áz m z i � �o} � ��� �r� ����¡�²�³�´rµ�¶r� ��� ��~ �lrf p � j | �o} ~ � ^� ³�� ��£ ·�£ �lrf p � j | �o} ~ �

ëìíîïðñ òóôõö÷ ø ù ú÷ ø ù úû ø ü úý ø � úý ø � úý ø ü úý ø ù ú ÷ ø � ú÷ ø � úû ø � úû ø � úû ø � ú

À

ÿ� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0 1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

memcpyegf h i�j k�l�mon�p q l�f srt u�vegf h i�j k�l�mon�p q � f h �gt u�v

i�u | �� o� ¡����¢� £ ¤O£ ��£ ¥{£ ��£ ¦M£ ��£ §¨£ � �i�u | ���o� ¡����¢� £ ©�£ ��£ ªr£ ��£ «Z£ ��£ ¬¨£ � �i�u | ��­]� ¡����¢� £ ® £ ��£ ¯�£ � £ °�£ ��£ ±�£ � ��f h q z]| f ho} ~��i�u | � � � �

l�f p � j | ��} ~ �� �o r�Æ ¹ Æ �rÀ Å�� À ÇrÌ Î�Ï Ð�Ñ Â�Ò�Ó ÈrÔ ÕgÌ Ç�Ï�Î � ál�f p � j | �^} ~ � o� ³�� ��£ ·r£ �l�f p � j | �^} ~ �

������ òó��÷ ø ù ú÷ ø ù úû ø ü úý ø � úý ø � úý ø ü úý ø ù ú ÷ ø � ú÷ ø � úû ø � úû ø � úû ø � ú

À

� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0�1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

x[6] = '?'egf h i�j k�l�mon�p q lrf s�t u vegf h i�j k�l�mon�p q � f h��rt u v

i�u | �� ^� ¡������ £ ¤M£ ��£ ¥{£ ��£ ¦O£ � £ §¨£ � �i�u | ���^� ¡������ £ ©�£ ��£ ªr£ � £ «Z£ � £ ¬¨£ � �i�u | ��­o� ¡������ £ ® £ � £ ¯�£ ��£ °�£ � £ ± £ � ��f h q z]| f ho} ~��i�u | � � � �

lrf p � j | ��} ~ �� �o r�z m z i � �o} � ��� �r� ����¡�²�³�´rµ�¶r� ��� ��~ �lrf p � j | �o} ~ �¿¢Ø Ó�Ù Ú¢Ü ��Ü álrf p � j | �o} ~ �

������ òó��÷ ø ù ú÷ ø ù úû ø ü úý ø � úý ø � úý ø ü úý ø ù ú ÷ ø � ú÷ ø � úû ø � úû ø � úû ø � ú

À

ü ù� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0 1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

C and Arrays: Summary

FHGJI KMLMNMLOI I LMPMQ

�¢KMI PWN G�� N K��MKMN

�]YZT��ZLOd_KMT][ LON N PWY]TZQMLOc KSd_KM`OaZLMT]R QMd

�]GZGJdJLMTZP�� LMPMQSGZc]K��M\]I KOQMQMR T��J[ aZKSQMLMdJKW[ aZR T��

ü ü� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0�1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

What about C++ and Java

U���� "!�#%$'&�(*) +*,.- &%$/#.0'1 2'3 54�+7698:#%2�) &*;.&:< 1 2=&?> @=&�A B:C A7+*(.&%) #=> +7)%1 2'3�D%DE< +7).8=- #.0F0�> G*(=&=09> @.&%) & ,FG(*) +=H.1 ;%1 2.I?G=+76.)*+=J92?8.@=&.8=K 0?#*2.;'0:&%$'#*2F> 1 8:0.L*M�+:J9&:H.&%)=> @.1 0E$'#*KF&=098=+.;.&@=#%) ;?> +N) &.#*;'0=1 2:8=&?J?@=&*29G.+%690=&.&'0=+*$'&=> @*1 2=I�- 1 K &O0'B K CN1 >%;.+*&=0'2 +=>7$'&.#%2#*2FG�$'+%) &?J?@=#=>.G.+%6=P H=&�,.&.&*2�6:0:&*;?> +N,FGE$'#%2FG9G.&.#%) 0?+:<73�#*2.;�$'#*KF&=0�>@=&8:+*;.&�@=#7) ;?> +N6=2.;.&%) 0 > #*2.;�1 <Q6F0=&.;�1 2'#%2�6=2:8=+*2:> ) +*- - &.;?< #[email protected] +%2RML��ML SM�#=0�) &.#%- #7) ) #:G=0 5T:#=H=#�$'+*;.&*-:1 2:0.(.1 ) &*;?< ) +*$VU�;.# SW�1 < < &7) &*2=8:&�,.&:> J�&*&*2?T=#:H.#E#*2=;'U�;*#�1 0�> @=#:>%T:#=H=#E#7) ) #=G:0EX�Y�!QZ[0 > #%) >%# >71 2=;*&:\]%^ U�;.#E8:#*2�@=#:H.&E#%) ,.1 > ) #%) GE,=+76=2=;.0

ü �� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0 1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

Arrays in Ada

V��]LWa]LMQWI KMLONMLMI I LOPMQ`_ a�b �ZR dJKMT]QMR G]TZLMNOLMT��JdJYZN [ R b �ZR d_KOTZQMR G]TZLON c

V��]LWLMI I LMPW`OLMTJaZL��OKWR [ QSQMR d�K��ZKO[ KMI d_R TZK��JLM[]I Y]T[b [ R d_K fe:+.8:#%- H.#%) 1 #*,.- &�- &*2.I:> @'#%) ) #:G=0?#7) &E#*- - +=J�&*;�1 2?> @.&�- #:> &=0F>%3`0F> #%2=;.#7);�g 3�h.h.i

V��]LWLMI I LMP`j]GZY]T��]QW`MLOTkj]KWLOI j]R [ I LMI P�lMN G�� KMI?jZG]YZT��k�]GZKOQWTZG][a]L��MKS[ GJQM[ LOI []LM[�m

Page 3: Arrays in C - MathUniPDtullio/IS-1/2004/Approfondimenti/A-Vetto… · 1 Array Pitfalls in C ! " # $ % & ' * +,-. / 0 1 2 3 4 5 6 7 8 9:; < =>? @ A B C D E Arrays in C FHGJI

3

ü �� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0�1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

“One -of -a-Kind” Arrays

ì nHñ�o%pÍñ�q q p=r*s�t.p%nvu*p=w%xEp%q y7z { q p7q ry%|Q}7n%o%s

~�u*xNy%|Q}7n%o%s�t.p%nvy*x�o*r7n*p7�Nz tw*p7� }*x*s

� q |7t=x%oQ}7q x 3�+%$E(*6 > &�g ���.� 2F> &.I.&7) i z sU�� p%q q p.r g �/� �E��i |*��� - +*#:> �

y*x*�Qz n�x%n%o 3�+*$E(%6 > &%�

ü �� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0 1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

� q |7t=x*oQ}7q x 3�+*$E(%6 > &�g ���*� 2:> &*I.&%) i z s{ r � x U�) ) z s�p%q q p.r g � 2F> &.I*&%) q p%n7�%x?�%� i |*��� - +.#:> �U�� U�) )%g �/� �'��i�� �Ng +=> @.&%) 0?� � h.i �� � U�) )7� �EU��3k� U�) )%g �.�'L LF� ] i�� �Ng � ^ � ^ +:> @=&7) 0?� � ] i �

y*x%�Qz n3k� �EU��3�g �F�vL L%�F�.i�� ��U�g �vL L=�.i �x7n%o 3�+*$E(*6F> &7�

Typed Arrays

ð�{ p%�=x.sNz { sNy%|Q}7n%o%sE� q |Q� ñ

ì � 3�P e:&*2.I:> @�� �?U�P e:&*2.I:> @ { u*x%n3�+*2=0 > ) #%1 2F> �Q��) ) +%) z sNq p7z s*x*o

ì � U�P e:#.0 > � � { u*x7n3�+*2=0 > ) #%1 2F> �Q��) ) +%) z sNq p7z s*x*o

ü Ö� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0�1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

Arrays in Ada are Safe

� c]PMGZYJ[ I PW[ G_R T��ZK��WLWT]GZT'b K��OR QM[ KOTZ[]LMI I LMPS\ZG]QMR [ R GZT�lOLUHGZT]QM[ I LMR T][ ���^I I G]I¢K��M`OKM\Z[ R GZTJR QWI LMR QOK��

� q |7t.x*oQ}7q x 3�@=&=8.K 0 z sU�� p%q q p=r g �'L L%� ].] i |*� � 2:> &.I.&7) �y*x*�Qz nU�g � ] �Fi�� �[�=�x%n%o 3�@=&.8=K 0*� â ¿ � ¹ À y w Á x � � w º�¹ ½

ü ×� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0 1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

� � � �   ¡ ¢ �  �£=¤ ¥ ¦7§ ¨© ª �  Q«F¬ ¦ ­ ® ¯ § ¨Q° � � ° ªQ± ² ¤ ­ ³ ¯ ¤ ¥ ¯ ¤ ´ µ ¬7¶ · ¸ � ¹:º ¥ ® ¤ ­ »¹ ¢ ¼ � © § � ¼�½%¤ ¾ ± «�¿ «:¬ ¦ ­ ® ¯ ¸ �   © ¢ � ¼�º ¥ ® ¤ ­ § ¨½�¿ º ¥ ® ¤ ­ ¿ À�º ¥ ® ¤ ­ Á º  ¯ à ­ »Ä   ÅF§ ¼ ¹ � �:ÆN§ ¼E«�Á ÇF¤ ´ µ ¬vÈ � � �§ ¹�« ± Æ ¸ ·�½ © É   ¼½�¿ ÀQ« ± Æ ¸ »  ¼ ¡�§ ¹ Ê  ¼ ¡�È � � � Ê�   © ¢ � ¼�½Q»  ¼ ¡�½7¤ ¾ »«=Ë7¿ «F¬ ¦ ­ ® ¯�¿ À ± Ë Ì Í Î Ï Ì Í Î Ð Ì Í ¸ »?Ñ Ñ�Ò:Ó Ô Õ Ö × Ø Ù�Ú?Û Ü Ý[ÒFÓ Þ Û × Ø Ù7ß«FÏ�¿ «F¬ ¦ ­ ® ¯ ± ËQÌ Ì Ë Í Í ¸V¿ À ± Ë Ì Í Î Ï Ì Í Î ® ­ à ¬ ¯ Ã*À ·�á Ì Í ¸ »â ¿ º ¥ ® ¤ ­F¿ À�½%¤ ¾ ± «=Ë ¸ »%ã ãQä�Ù�å æ Úç ¿ º ¥ ® ¤ ­F¿ À�½%¤ ¾ ± «FÏ ¸ »*Ñ Ñ�è7ÙQé æ ÚÄ   Å § ¼ ê

  ¼ ¡�£=¤ ¥ ¦ »

Ada Arrays are Powerful: Array Bounds

��� � ��� � � � � � � � � � � � � ��� � � � � � � � � � � � � � � � � � � � � �

Parameter Passing in C, Java and Ada

ü ÿ� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0 1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

Two Parameter Passing Modes in C/Java

ëHP��MLMN Y]K

ëHPS`MGZT]QM[ LMTZ[��MLMN YZK

� T_U���� [ a]KMI KWLMI KWL����]R [ R G]TZLMNOd_G��ZKOQ � G�) &=< &%) &%2:8=& � G?8=+*2:0F> #*2F>�) &=< &7) &*2=8:&

Page 4: Arrays in C - MathUniPDtullio/IS-1/2004/Approfondimenti/A-Vetto… · 1 Array Pitfalls in C ! " # $ % & ' * +,-. / 0 1 2 3 4 5 6 7 8 9:; < =>? @ A B C D E Arrays in C FHGJI

4

ü � � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0�1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

By Value

�Za]KW\]LMI LMdJKM[ KMI¢`OLMTkj]KW`OaZLMT��ZK��_R T]QMR �]KW[ a]KWc YZT]`M[ R G]Tkj]YZ[][ a]K�MLON YZKSGZc][ aZKSGZI R �ZR TZLMNO\ZLMI LMdJKM[ KOI^R QWT]GZ[ZdJG��ZR c R K��

à Á w ½ i s � �^} w x�y  r� w x�y ��~�� Z�^�r�

à Á w ½ q � �o} ~��w x�y�| �¢�g�w x�y �Z�¢¶g�i s � �^} | ��� ~ �

ì ì�| �r�¢�^u�m�� m�

� ù� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0 1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

By Constant Value

� T_U

� TkRML��ML

à Á w ½ i s � �o} ��Á x º y{w x�y  r� ��Á x º y{w x�y � ~�� ]�o�r�

� Ë Á Æ À w ¼ � y w Á x ¹ � � Á��

à Á w ½ i s � �o} ¾ w x � ¼ w x�y  r� ¾ w x � ¼ w x�y � ~�� ]�o�r�

� Ë Á Æ À w ¼ � y w Á x ¹ � � Á��

� ü� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0�1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

Changing the Actual Parameter� TVRML��OL íZ�@=&%) &�1 0E��î�J9#:G?> +'8.@=#%2=I.&?> @=&'H=#*- 6=&E+:<7#'0F8=#*- #%)%(.#%) #*$'&:> &%)

ïVð.ñ ò�ó ô õ öQ÷ ñ�ø ñ�ù ÷ ú ñ ò û ü ö ý þFÿ ú�ó ô � ø�� � +%)*#N) &.8:+7) ;�g 8=- #=0:0=i7+%)*#7) ) #=GE(=#7) #*$'&=> &7)=G=+7698:#%2'+*2*- G'8=@.#*2=I*&?> @=&=8=+*$E(=+%2=&*2:> 0 íZ�@.1 0'1 0?#�(%) +%,.- &*$��:T:#:H.#N) &.#*- - GE$'#%K &.0�> @=&�(*) +.I%) #*$E$'&7) P 0E- 1 < &�@.#%) ;.@=&%) &

� TJU 54�+76'@=#=H=&?> +'8.) &.#=> &E#�(.+*1 2F> &%)%,:GE@=#%2=;E#%2=;N6F0=&?> @=#:> íZ�@=&�(*) +.I7) #*$E$'&7)%$�6F0F>7(=&7) < +%) $V> &.;%1 +76F0',.+.+%KFKF&.&*(*1 2=I�,FG'0=(.&=8.1 < G*1 2=I

� � � | h�l���p íZ�@.1 0?#%- 0=+�$'#*KF&=09> @.&'8:+*;.&�@.#%) ;?> +'8.@=#*2.I.& à Á w ½ � s�so} w x�y�� � ~ ��w x�y p��� s�s^} �Íp ~ �

� �� � � � � ! " # $ % & ' ( � ) % * $ + � % & , $ -�. / 0 1 2 3 4 5 6 2 7 8 6 3 9 : 6 ; < =�> 3 6 6 ? 4 @ 2 A 6 7 9 B 9 C 4 7 D C @ 6 7 E 6

Parameter Passing Modes in Ada

¾ » x � y w Á x ± s�� } ���ªrj s | q ~ � ¹ y » � x ªrj s | q �¾ » x � y w Á x ± s�� } �� w x ªrj s | q ~ � ¹ y » � x ªrj s | q �

Á » y ® h p�f l�mZq u�m � � s�i m�lrk�� m� f p | h]k�h�f h�f q f | j f ­ m�l�� �� � ���� � �� u�m | i q k | j � | � |rz m q mr�gf pok � l | q m�l��Zf q u q u m^j | p q� | j k�mos �����Zu�m�h q u�m � � s�i m�l�k�� mZq mr� z f h | q m p

Àg� Ág� ¹ ½ » � ¹ ¦Ms � � } ���ªrj s | q � �� Á » y ªrj s | q ~ �

w x Á » y ® h p�f l�mZq u�m � � s�i m�lrk�� m� f p | � �� � ���� �Zf h�f q f | j f ­ m�l^� �q u m � | j k mos ��q u�m | i q k | j � | � |rz m q mr� �� u�m | i q k | j � | � |rz m q mr�gf pok � l | q m�l��Zf q u q u m^j | p q� | j k�mos �����Zu�m�h q u�m � � s�i m�l�k�� mZq mr� z f h | q m p�t

Àg� Ág� ¹ ½ » � ¹ ® h i�� m z mrh q¢} �� w x Á » y ªrj s | q ~ �

w x ® q £ p q u�mol�m � | k�j q z s�l�mg� q u m w x i | ho��m]s z f q q m�l ® h p�f l�mZq u�m � � s�i m�lrk�� mosr��� k�h i q f srh�� f p |�� �� �! " �"f h�f q f | j f ­ m�l^� �Zq u�m � | j k�mos ��q u�m | i q k | j � | � |rz m q mr� ªrk�h i q f srh pZi | h]srh�j �^u | � m � | � |rz m q m�� pZs � z s�l�m w

Àg� Ág� ¹ ½ » � ¹$# � mrh %�ªrf j m } �� &�q � f h���~ �Àg� Ág� ¹ ½ » � ¹$# � mrh %�ªrf j m } �� w x &gq � f h�� ~ �