Tutorial on Pointers and Arrays in c

  • Upload
    kgoulas

  • View
    229

  • Download
    0

Embed Size (px)

Citation preview

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    1/41

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    2/41

    Ted Jensen is ! re#ired E2e"#roni"s En,ineer 9%o 9or:ed !s ! %!rd9!re desi,ner or 4!n!,er

    o %!rd9!re desi,ners in #%e ie2d

    o 4!,ne#i" re"ordin,. Pro,r!44in, %!s been ! %obby o %is o !nd on sin"e 165 9%en %e

    2e!rned %o9 #o :ey&$n"% "!rds or

    s$b4ission #o be r$n on ! 4!inr!4e. ?T%e 4!inr!4e %!d -@ o 4!,ne#i" "ore 4e4ory.

    Use of this Material:

    E7ery#%in, "on#!ined %erein is %ereby re2e!sed #o #%e P$b2i" Do4!in. Any &erson 4!y "o&y

    or dis#rib$#e #%is 4!#eri!2 in !ny 4!nner #%ey 9is%. T%e on2y #%in, I !s: is #%!# i #%is 4!#eri!2

    is $sed !s ! #e!"%in, !id in ! "2!ss8 I 9o$2d !&&re"i!#e i# i i# 9ere dis#rib$#ed in i#s en#ire#y8

    i.e. in"2$din, !22 "%!ers8 #%e &re!"e !nd #%e in#rod$"#ion. I 9o$2d !2so !&&re"i!#e i# i $nder

    s$"% "ir"$4s#!n"es #%e ins#r$"#or o s$"% ! "2!ss 9o$2d dro& 4e ! no#e !# one o #%e !ddresses

    be2o9 inor4in, 4e o #%is. I %!7e 9ri##en #%is 9i#% #%e %o&e #%!# i# 9i22 be $se$2 #o o#%ers

    !nd sin"e I4 no# !s:in, !ny in!n"i!2 re4$ner!#ion8 #%e on2y 9!y I :no9 #%!# I %!7e !# 2e!s#

    &!r#i!22y re!"%ed #%!# ,o!2 is 7i! eedb!": ro4 #%ose %o9 ind #%is 4!#eri!2 $se$2.By #%e

    9!y8 yo$ needn# be !n ins#r$"#or or #e!"%er #o "on#!"# 4e. I 9o$2d !&&re"i!#e ! no#e ro4

    !nyone 9%o inds #%e 4!#eri!2 $se$28 or 9%o %!s "ons#r$"#i7e "ri#i"is4 #o oer. I4 !2so9i22in, #o !ns9er >$es#ions s$b4i##ed by 4!i2.

    Ted Jensen [email protected]

    P.O. Bo; +*- 13-1/3+/35-/*

    Red9ood Ci#y8 CA 6-0-

    De". 166/

    INR!"UCI!N

    I one is #o be &roi"ien# in #%e 9ri#in, o "ode in #%e C &ro,r!44in, 2!n,$!,e8 one 4$s# %!7e! #%oro$,% 9or:in, :no92ed,e o %o9 #o $se &oin#ers. Unor#$n!#e2y8 C &oin#ers !&&e!r #o

    re&resen# ! s#$4b2in, b2o": #o ne9"o4ers8 &!r#i"$2!r2y #%ose "o4in, ro4 o#%er "o4&$#er

    2!n,$!,es s$"% !s For#r!n8 P!s"!2 or B!si".To !id #%ose ne9"o4ers in #%e $nders#!ndin, o

    &oin#ers I %!7e 9ri##en #%e o22o9in, 4!#eri!2. To ,e# #%e 4!;i4$4 benei# ro4 #%is 4!#eri!28

    I ee2 i# is i4&or#!n# #%!# #%e $ser be !b2e #o r$n #%e "ode in #%e 7!rio$s 2is#in,s "on#!ined in

    #%e !r#i"2e. I %!7e !##e4ed8 #%ereore8 #o :ee& !22 "ode ANSI "o4&2i!n# so #%!# i# 9i22 9or:

    9i#% !ny ANSI "o4&2i!n# "o4&i2er. And I %!7e #ried #o "!re$22y b2o": #%e "ode 9i#%in #%e

    #e;# so #%!# 9i#% #%e %e2& o !n ASCII #e;# edi#or one "!n "o&y ! ,i7en b2o": o "ode #o ! ne9

    i2e !nd "o4&i2e i# on #%eir sys#e4. I re"o44end #%!# re!ders do #%is !s i# 9i22 %e2& in

    $nders#!ndin, #%e 4!#eri!2.

    C

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    3/41

    by#es8 !nd #%!# o ! 2on, in#e,er is - by#es. In C #%e sie o ! 7!ri!b2e #y&e s$"% !s !n in#e,er

    need no# be #%e s!4e on !22 #y&es o 4!"%ines.

    (%en 9e de"2!re ! 7!ri!b2e 9e inor4 #%e "o4&i2er o #9o #%in,s8 #%e n!4e o #%e 7!ri!b2e

    !nd #%e #y&e o #%e 7!ri!b2e. For e;!4&2e8 9e de"2!re ! 7!ri!b2e o #y&e in#e,er 9i#% #%e n!4e

    : by 9ri#in,'

    in# :

    On seein, #%e Gin#H &!r# o #%is s#!#e4en# #%e "o4&i2er se#s !side * by#es ?on ! PC o 4e4ory

    #o %o2d #%e 7!2$e o #%e in#e,er. I# !2so se#s $& ! sy4bo2 #!b2e. And in #%!# #!b2e i# !dds #%e

    sy4bo2 : !nd #%e re2!#i7e !ddress in 4e4ory 9%ere #%ose * by#es 9ere se# !side.

    T%$s8 2!#er i 9e 9ri#e'

    : *

    !# r$n #i4e 9e e;&e"# #%!# #%e 7!2$e * 9i22 be &2!"ed in #%!# 4e4ory 2o"!#ion reser7ed or #%e

    s#or!,e o #%e 7!2$e o :. In C 9e reer #o ! 7!ri!b2e s$"% !s #%e in#e,er : !s !n Gobe"#H.

    In ! sense #%ere !re #9o G7!2$esH !sso"i!#ed 9i#% #%e obe"# :8 one bein, #%e 7!2$e o #%e

    in#e,er s#ored #%ere ?* in #%e !bo7e e;!4&2e !nd #%e o#%er bein, #%e G7!2$eH o #%e 4e4ory

    2o"!#ion 9%ere i# is s#ored8 i.e. #%e !ddress o :. So4e #e;#s reer #o #%ese #9o 7!2$es 9i#% #%e

    no4en"2!#$re r7!2$e ?ri,%# 7!2$e8 &rono$n"ed G!re 7!2$eH !nd 27!2$e ?2e# 7!2$e8 &rono$n"ed

    Ge2 7!2$eH res&e"#i7e2y.

    In so4e 2!n,$!,es8 #%e 27!2$e is #%e 7!2$e &er4i##ed on #%e 2e# side o #%e !ssi,n4en#

    o&er!#or K ?i.e. #%e !ddress 9%ere #%e res$2# o e7!2$!#ion o #%e ri,%# side ends $&. T%e

    r7!2$e is #%!# 9%i"% is on #%e ri,%# side o #%e !ssi,n4en# s#!#e4en#8 #%e K* !bo7e. R7!2$es"!nno# be $sed on #%e 2e# side o #%e !ssi,n4en# s#!#e4en#. T%$s' * : is i22e,!2. A"#$!22y8

    #%e !bo7e deini#ion o G27!2$eH is so4e9%!# 4odiied or C.

    According to K&R-2 (page 197): 1!

    "An #o$ject# is a named region o% storage an #'a'e# is an e*pression re%erring to an

    o$ject.+

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    4/41

    In !22 o #%ese e;!4&2es8 9e !re $sin, * by#e in#e,ers so !22 "o&yin, o r7!2$es ro4 one

    s#or!,e 2o"!#ion #o #%e o#%er is done by "o&yin, * by#es.

    9o$2d be "o&yin, - by#es.

    No98 2e#s s!y #%!# 9e %!7e ! re!son or 9!n#in, ! 7!ri!b2e desi,ned #o %o2d !n 27!2$e ?!n

    !ddress. T%e sie re>$ired #o %o2d s$"% ! 7!2$e de&ends on #%e sys#e4. On o2der des: #o&"o4&$#ers 9i#% -@ o 4e4ory #o#!28 #%e !ddress o !ny &oin# in 4e4ory "!n be "on#!ined in

    * by#es. Co4&$#ers 9i#% 4ore 4e4ory 9o$2d re>$ire 4ore by#es #o %o2d !n !ddress. So4e

    "o4&$#ers8 s$"% !s #%e IB PC 4i,%# re>$ire s&e"i!2 %!nd2in, #o %o2d ! se,4en# !nd ose#

    $nder "er#!in "ir"$4s#!n"es. T%e !"#$!2 sie re>$ired is no# #oo i4&or#!n# so 2on, !s 9e %!7e

    ! 9!y o inor4in, #%e "o4&i2er #%!# 9%!# 9e 9!n# #o s#ore is !n !ddress.

    S$"% ! 7!ri!b2e is "!22ed ! G&oin#er 7!ri!b2eH ?or re!sons 9%i"% %o&e$22y 9i22 be"o4e

    "2e!rer ! 2i##2e 2!#er. In C 9%en 9e deine ! &oin#er 7!ri!b2e 9e do so by &re"edin, i#s n!4e

    9i#% !n !s#eris:. In C 9e !2so ,i7e o$r &oin#er ! #y&e 9%i"%8 in #%is "!se8 reers #o #%e #y&e o

    d!#! s#ored !# #%e !ddress 9e 9i22 be s#orin, in o$r &oin#er. For e;!4&2e8 "onsider #%e 7!ri!b2e

    de"2!r!#ion'

    in# r

    r is #%e n!4e o o$r 7!ri!b2e ?$s# !s K: 9!s #%e n!4e o o$r in#e,er 7!ri!b2e. T%e K

    inor4s #%e "o4&i2er #%!# 9e 9!n# ! &oin#er 7!ri!b2e8 i.e. #o se# !side %o9e7er 4!ny by#es is

    re>$ired #o s#ore !n !ddress in 4e4ory. T%e Gin#H s!ys #%!# 9e in#end #o $se o$r &oin#er

    7!ri!b2e #o s#ore #%e !ddress o !n in#e,er. S$"% ! &oin#er is s!id #o G&oin# #oH !n in#e,er.

    $en"e #o #%e &ro,r!44er sin"e !# #%e so$r"e "ode 2e7e2 NULL 0 is ,$!r!n#eed #o

    e7!2$!#e #o #r$e re,!rd2ess o #%e in#ern!2 7!2$e o NULL.

    B$#8 b!": #o $sin, o$r ne9 7!ri!b2e r. S$&&ose no9 #%!# 9e 9!n# #o s#ore in r #%e !ddress

    o o$r in#e,er 7!ri!b2e :. To do #%is 9e $se #%e $n!ry KQ o&er!#or !nd 9ri#e'

    r Q:

    (%!# #%e KQ o&er!#or does is re#rie7e #%e 27!2$e ?!ddress o :8 e7en #%o$,% : is on #%e ri,%#

    %!nd side o #%e !ssi,n4en# o&er!#or K8 !nd "o&ies #%!# #o #%e "on#en#s o o$r &oin#er r.No98 r is s!id #o G&oin# #oH :. Be!r 9i#% $s no98 #%ere is on2y one 4ore o&er!#or 9e need #o

    dis"$ss.

    T%e Gdereeren"in, o&er!#orH is #%e !s#eris: !nd i# is $sed !s o22o9s'

    r

    9i22 "o&y #o #%e !ddress &oin#ed #o by r. T%$s i r G&oin#s #oH ?"on#!ins #%e !ddress o :8

    #%e !bo7e s#!#e4en# 9i22 se# #%e 7!2$e o : #o . T%!# is8 9%en 9e $se #%e K #%is 9!y 9e !re

    reerrin, #o #%e 7!2$e o #%!# 9%i"% r is &oin#in, #o8 no# #%e 7!2$e o #%e &oin#er i#se2.

    Si4i2!r2y8 9e "o$2d 9ri#e'

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    5/41

    &rin#?HdnH8r

    #o &rin# #o #%e s"reen #%e in#e,er 7!2$e s#ored !# #%e !ddress &oin#ed #o by GrH.

    One 9!y #o see %o9 !22 #%is s#$ i#s #o,e#%er 9o$2d be #o r$n #%e o22o9in, &ro,r!4 !nd #%en

    re7ie9 #%e "ode !nd #%e o$#&$# "!re$22y.

    3#include

    int j, k;int *ptr;

    int main(void){j = 1;k = ;

    ptr = !k;print"($n);print"(j has the value %d and is stored at %p$n,j,!j);print"(k has the value %d and is stored at %p$n,k,!k);print"(ptr has the value %p and is stored at %p$n,ptr,!ptr);print"(&he value o" the inte'er pointed to ptr is %d$n,*ptr);return ;+

    To re7ie9'A 7!ri!b2e is de"2!red by ,i7in, i# ! #y&e !nd ! n!4e ?e.,. in# :

    A &oin#er 7!ri!b2e is de"2!red by ,i7in, i# ! #y&e !nd ! n!4e ?e.,. in# r 9%ere #%e !s#eris:

    #e22s #%e "o4&i2er #%!# #%e 7!ri!b2e n!4ed r is ! &oin#er 7!ri!b2e !nd #%e #y&e #e22s #%e

    "o4&i2er 9%!# #y&e #%e &oin#er is #o &oin# #o ?in#e,er in #%is "!se.

    On"e ! 7!ri!b2e is de"2!red8 9e "!n ,e# i#s !ddress by &re"edin, i#s n!4e 9i#% #%e $n!ry KQ

    o&er!#or8 !s in Q:.

    (e "!n Gdereeren"eH ! &oin#er8 i.e. reer #o #%e 7!2$e o #%!# 9%i"% i# &oin#s #o8 by $sin, #%e

    $n!ry K o&er!#or !s in r.

    An G27!2$eH o ! 7!ri!b2e is #%e 7!2$e o i#s !ddress8 i.e. 9%ere i# is s#ored in 4e4ory. T%e

    Gr7!2$eH o ! 7!ri!b2e is #%e 7!2$e s#ored in #%!# 7!ri!b2e ?!# #%!# !ddress.

    Re%erences in ,apter 1:

    1! "Te , rogramming /angage+ 2nd 0dition

    B. @erni,%!n !nd D. Ri#"%ie

    Pren#i"e

    ISBN 031+3110+*35

    C

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    6/41

    One re!son or doin, #%is is so #%!# 2!#er8 on"e r G&oin#s #oH so4e#%in,8 i 9e 9ri#e'

    r *

    #%e "o4&i2er 9i22 :no9 %o9 4!ny by#es #o "o&y in#o #%!# 4e4ory 2o"!#ion &oin#ed #o by r.

    I r 9!s de"2!red !s &oin#in, #o !n in#e,er8 * by#es 9o$2d be "o&ied8 i ! 2on,8 - by#es 9o$2dbe "o&ied. Si4i2!r2y or 2o!#s !nd do$b2es #%e !&&ro&ri!#e n$4ber 9i22 be "o&ied. B$#8

    deinin, #%e #y&e #%!# #%e &oin#er &oin#s #o &er4i#s ! n$4ber o o#%er in#eres#in, 9!ys !

    "o4&i2er "!n in#er&re# "ode. For e;!4&2e8 "onsider ! b2o": in 4e4ory "onsis#in, i #en

    in#e,ers in ! ro9. T%!# is8 *0 by#es o 4e4ory !re se# !side #o %o2d 10 in#e,ers.

    No98 2e#s s!y 9e &oin# o$r in#e,er &oin#er r !# #%e irs# o #%ese in#e,ers. F$r#%er4ore 2e#s

    s!y #%!# in#e,er is 2o"!#ed !# 4e4ory 2o"!#ion 100 ?de"i4!2. (%!# %!&&ens 9%en 9e 9ri#e'

    r 1

    Be"!$se #%e "o4&i2er G:no9sH #%is is ! &oin#er ?i.e. i#s 7!2$e is !n !ddress !nd #%!# i# &oin#s

    #o !n in#e,er ?i#s "$rren# !ddress8 1008 is #%e !ddress o !n in#e,er8 i# !dds * #o r ins#e!d o18 so #%e &oin#er G&oin#s #oH #%e ne;# in#e,er8 !# 4e4ory 2o"!#ion 10*. Si4i2!r2y8 9ere #%e

    r de"2!red !s ! &oin#er #o ! 2on,8 i# 9o$2d !dd - #o i# ins#e!d o 1. T%e s!4e ,oes or o#%er

    d!#! #y&es s$"% !s 2o!#s8 do$b2es8 or e7en $ser deined d!#! #y&es s$"% !s s#r$"#$res. T%is is

    ob7io$s2y no# #%e s!4e :ind o G!ddi#ionH #%!# 9e nor4!22y #%in: o. In C i# is reerred #o !s

    !ddi#ion $sin, G&oin#er !ri#%4e#i"H8 ! #er4 9%i"% 9e 9i22 "o4e b!": #o 2!#er.

    Si4i2!r2y8 sin"e r !nd r !re bo#% e>$i7!2en# #o r 1 ?#%o$,% #%e &oin# in #%e

    &ro,r!4 9%en r is in"re4en#ed 4!y be dieren#8 in"re4en#in, ! &oin#er $sin, #%e $n!ry

    o&er!#or8 ei#%er &re3 or &os#38 in"re4en#s #%e !ddress i# s#ores by #%e !4o$n# sieo?#y&e

    9%ere G#y&eH is #%e #y&e o #%e obe"# &oin#ed #o. ?i.e. * or !n in#e,er8 - or ! 2on,8 e#"..

    Sin"e ! b2o": o 10 in#e,ers 2o"!#ed "on#i,$o$s2y in 4e4ory is8 by deini#ion8 !n !rr!y o

    in#e,ers8 #%is brin,s $& !n in#eres#in, re2!#ions%i& be#9een !rr!ys !nd &oin#ers.

    Consider #%e o22o9in,'

    in# 4y!rr!yW X18*+818-83/8100

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    7/41

    int main(void){int i;ptr = !marra-; 4* point our pointer to the "irstelement o" the arra *4print"($n$n);"or(i = ; i < 5; i66){print"(marra-%d = %d ,i,marra-i); 4*

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    8/41

    T%is r!ises !n in#eres#in, &rob2e4. Sin"e 4y!rr!y is ! n!4ed re,ion o s#or!,e8 9%y is

    G4y!rr!yH in #%e !bo7e !ssi,n4en# s#!#e4en# no# !n 27!2$e) To reso27e #%is &rob2e48 so4e

    reer #o G4y!rr!yH !s !n G$n4odii!b2e 27!2$eH.

    odiy #%e e;!4&2e &ro,r!4 !bo7e by "%!n,in,

    r Q4y!rr!y0W #o r 4y!rr!y

    !nd r$n i# !,!in #o 7eriy #%e res$2#s !re iden#i"!2.

    No98 2e#s de27e ! 2i##2e $r#%er in#o #%e dieren"e be#9een #%e n!4es GrH !nd G4y!rr!yH

    !s $sed !bo7e. So4e 9ri#ers 9i22 reer #o !n !rr!ys n!4e !s ! "ons#!n# &oin#er. (%!# do 9e

    4e!n by #%!#) (e228 #o $nders#!nd #%e #er4 G"ons#!n#H in #%is sense8 2e#s ,o b!": #o o$r

    deini#ion o #%e #er4 G7!ri!b2eH. (%en 9e de"2!re ! 7!ri!b2e 9e se# !side ! s&o# in 4e4ory

    #o %o2d #%e 7!2$e o #%e !&&ro&ri!#e #y&e. On"e #%!# is done #%e n!4e o #%e 7!ri!b2e "!n be

    in#er&re#ed in one o #9o 9!ys. (%en $sed on #%e 2e# side o #%e !ssi,n4en# o&er!#or8 #%e

    "o4&i2er in#er&re#s i# !s #%e 4e4ory 2o"!#ion #o 9%i"% #o 4o7e #%!# 7!2$e res$2#in, ro4

    e7!2$!#ion o #%e ri,%# side o #%e !ssi,n4en# o&er!#or. B$#8 9%en $sed on #%e ri,%# side o #%e!ssi,n4en# o&er!#or8 #%e n!4e o ! 7!ri!b2e is in#er&re#ed #o 4e!n #%e "on#en#s s#ored !# #%!#

    4e4ory !ddress se# !side #o %o2d #%e 7!2$e o #%!# 7!ri!b2e.

    (i#% #%!# in 4ind8 2e#s no9 "onsider #%e si4&2es# o "ons#!n#s8 !s in'

    in# i8 :

    i *

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    9/41

    C i# does no#. In C ! s#rin, is !n !rr!y o "%!r!"#ers #er4in!#ed 9i#% ! bin!ry ero "%!r!"#er

    ?9ri##en !s K0. To s#!r# o o$r dis"$ssion 9e 9i22 9ri#e so4e "ode 9%i"%8 9%i2e &reerred

    or i22$s#r!#i7e &$r&oses8 yo$ 9o$2d &rob!b2y ne7er 9ri#e in !n !"#$!2 &ro,r!4. Consider8 or

    e;!4&2e'

    "%!r 4ys#rin,-0W

    4ys#rin,0W KT

    4ys#rin,1W Ke

    4ys#rin,*W Kd'

    4ys#rin,+W K0

    (%i2e one 9o$2d ne7er b$i2d ! s#rin, 2i:e #%is8 #%e end res$2# is ! s#rin, in #%!# i# is !n !rr!y o

    "%!r!"#ers #er4in!#ed9i#%!n$2"%!r!"#er. By deini#ion8 in C8 ! s#rin, is !n !rr!y o

    "%!r!"#ers #er4in!#ed 9i#% #%e n$2 "%!r!"#er. Be !9!re #%!# Gn$2H is no# #%e s!4e !s

    GNULLH. T%e n$2 reers #o ! ero !s is deined by #%e es"!&e se>$en"e K0. T%!# is i# o""$&ies

    one by#e o 4e4ory. T%e NULL8 on #%e o#%er %!nd8 is #%e 7!2$e o !n $nini#i!2ied &oin#er

    !nd &oin#ers re>$ire 4ore #%!n one by#e o s#or!,e. NULL is deined in ! %e!der i2e in yo$rC "o4&i2er8 n$2 4!y no# be deined !# !22.

    Sin"e 9ri#in, #%e !bo7e "ode 9o$2d be 7ery #i4e "ons$4in,8 C &er4i#s #9o !2#ern!#e 9!ys o

    !"%ie7in, #%e s!4e #%in,. Firs#8 one 4i,%# 9ri#e'

    "%!r 4ys#rin,-0W XT]8 Ke8 Kd8 K08

    B$# #%is !2so #!:es 4ore #y&in, #%!n is "on7enien#. So8 C &er4i#s'

    "%!r 4ys#rin,-0W GTedH

    (%en #%e do$b2e >$o#es !re $sed8 ins#e!d o #%e sin,2e >$o#es !s 9!s done in #%e &re7io$s

    e;!4&2es8 #%e n$2 "%!r!"#er ? K0 is !$#o4!#i"!22y !&&ended #o #%e end o #%e s#rin,.

    In !22 o #%e !bo7e "!ses8 #%e s!4e #%in, %!&&ens. T%e "o4&i2er se#s !side !n "on#i,$o$s b2o":

    o 4e4ory -0 by#es 2on, #o %o2d "%!r!"#ers !nd ini#i!2ied i# s$"% #%!# #%e irs# - "%!r!"#ers

    !re Ted0.

    No98 "onsider #%e o22o9in, &ro,r!4'

    &ro,r!4 +.13#include

    char str7-9 = 7 strin' to e used "or demonstrationpurposes;char str8-9;

    int main(void){char *p7; 4* a pointer to tpe character *4char *p8; 4* another pointer to tpe character *4puts(str7); 4* sho: strin' 7 *4p7 = str7; 4* point p7 at strin' 7 *4

    puts(p7); 4* sho: :hat p7 is pointin' to *4p8 = str8; 4* point p8 at strin' 8 *4

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    10/41

    putchar($n); 4* move do:n one line on the screen *4:hile(*p7 = $) 4* line 7 (see tet) *4{*p866 = *p766; 4* line 8 (see tet) *4+*p8 = $; 4* line (see tet) *4puts(str8); 4* sho: str8 on screen *4return ;+

    end &ro,r!4 +.1 3

    In #%e !bo7e 9e s#!r# o$# by deinin, #9o "%!r!"#er !rr!ys o 50 "%!r!"#ers e!"%. Sin"e #%ese

    !re ,2ob!22y deined8 #%ey !re ini#i!2ied #o !22 K0s irs#. T%en8 s#rA %!s #%e irs# -* "%!r!"#ers

    ini#i!2ied #o #%e s#rin, in >$o#es.No98 4o7in, in#o #%e "ode8 9e de"2!re #9o "%!r!"#er

    &oin#ers !nd s%o9 #%e s#rin, on #%e s"reen. (e #%en G&oin#H #%e &oin#er &A !# s#rA. T%!# is8 by

    4e!ns o #%e !ssi,n4en# s#!#e4en# 9e "o&y #%e !ddress o s#rA0W in#o o$r 7!ri!b2e &A. (e

    no9 $se &$#s? #o s%o9 #%!# 9%i"% is &oin#ed #o by &A on #%e s"reen. Consider

    %ere #%!# #%e $n"#ion &ro#o#y&e or &$#s? is'

    in# &$#s?"ons# "%!r s

    For #%e 4o4en#8 i,nore #%e G"ons#H. T%e &!r!4e#er &!ssed #o &$#s is ! &oin#er8 #%!# is #%e

    7!2$e o ! &oin#er ?sin"e !22 &!r!4e#ers in C !re &!ssed by 7!2$e8 !nd #%e 7!2$e o ! &oin#er

    is #%e !ddress #o 9%i"% i# &oin#s8 or8 si4&2y8 !n !ddress. T%$s 9%en 9e 9ri#e'

    &$#s?s#rA !s 9e %!7e seen8 9e !re &!ssin, #%e

    !ddress o s#rA0W. Si4i2!r2y8 9%en 9e 9ri#e'

    &$#s?&A 9e !re &!ssin, #%e s!4e !ddress8 sin"e

    9e %!7e se# &A s#rA

    ^i7en #%!#8 o22o9 #%e "ode do9n #o #%e 9%i2e? s#!#e4en# on 2ine A. Line A s#!#es'

    (%i2e #%e "%!r!"#er &oin#ed #o by &A ?i.e. &A is no# ! n$2 "%!r!"#er ?i.e. #%e #er4in!#in,

    K08 do #%e o22o9in,'

    2ine B s#!#es' "o&y #%e "%!r!"#er &oin#ed #o by &A #o #%e s&!"e &oin#ed #o by &B8 #%en

    in"re4en# &A so i# &oin#s #o #%e ne;# "%!r!"#er !nd &B so i# &oin#s #o #%e ne;# s&!"e.

    (%en 9e %!7e "o&ied #%e 2!s# "%!r!"#er8 &A no9 &oin#s #o #%e #er4in!#in, n$2 "%!r!"#er !nd

    #%e 2oo& ends.

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    11/41

    ^e##in, b!": #o #%e &ro#o#y&e or &$#s? or ! 4o4en#8 #%e G"ons#H $sed !s ! &!r!4e#er

    4odiier inor4s #%e $ser #%!# #%e $n"#ion 9i22 no# 4odiy #%e s#rin, &oin#ed #o by s8 i.e. i#

    9i22 #re!# #%!# s#rin, !s ! "ons#!n#.

    O "o$rse8 9%!# #%e !bo7e &ro,r!4 i22$s#r!#es is ! si4&2e 9!y o "o&yin, ! s#rin,. A#er

    &2!yin, 9i#% #%e !bo7e $n#i2 yo$ %!7e ! ,ood $nders#!ndin, o 9%!# is %!&&enin,8 9e "!n&ro"eed #o "re!#in, o$r o9n re&2!"e4en# or #%e s#!nd!rd s#r"&y? #%!# "o4es 9i#% C. I# 4i,%#

    2oo: 2i:e'

    "%!r 4ys#r"&y?"%!r des#in!#ion8 "%!r so$r"e

    X

    "%!r & des#in!#ion

    9%i2e ?so$r"e K0

    X

    & so$r"e

    & K0

    re#$rn des#in!#ion.

    In #%is "!se8 I %!7e o22o9ed #%e &r!"#i"e $sed in #%e s#!nd!rd ro$#ine o re#$rnin, ! &oin#er #o

    #%e des#in!#ion.

    A,!in8 #%e $n"#ion is desi,ned #o !""e #%e 7!2$es o #9o "%!r!"#er &oin#ers8 i.e. !ddresses8

    !nd #%$s in #%e &re7io$s &ro,r!4 9e "o$2d 9ri#e'

    in# 4!in?7oid

    X

    4ys#r"&y?s#rB8 s#rA

    &$#s?s#rB

    I %!7e de7i!#ed s2i,%#2y ro4 #%e or4 $sed in s#!nd!rd C 9%i"% 9o$2d %!7e #%e &ro#o#y&e'

    "%!r 4ys#r"&y?"%!r des#in!#ion8 "ons# "%!r so$r"e

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    12/41

    Re"!22 !,!in #%!# ! s#rin, is no#%in, 4ore #%!n !n !rr!y o "%!r!"#ers8 9i#% #%e 2!s# "%!r!"#er

    bein, ! K0. (%!# 9e %!7e done !bo7e is de!2 9i#% "o&yin, !n !rr!y. I# %!&&ens #o be !n !rr!y

    o "%!r!"#ers b$# #%e #e"%ni>$e "o$2d be !&&2ied #o !n !rr!y o in#e,ers8 do$b2es8 e#". In #%ose

    "!ses8 %o9e7er8 9e 9o$2d no# be de!2in, 9i#% s#rin,s !nd %en"e #%e end o #%e !rr!y 9o$2d

    no# be 4!r:ed 9i#% ! s&e"i!2 7!2$e 2i:e #%e n$2 "%!r!"#er. (e "o$2d i4&2e4en# ! 7ersion #%!#

    re2ied on ! s&e"i!2 7!2$e #o iden#iy #%e end. For e;!4&2e8 9e "o$2d "o&y !n !rr!y o &osi#i7e

    in#e,ers by 4!r:in, #%e end 9i#% ! ne,!#i7e in#e,er. On #%e o#%er %!nd8 i# is 4ore $s$!2 #%!#

    9%en 9e 9ri#e ! $n"#ion #o "o&y !n !rr!y o i#e4s o#%er #%!n s#rin,s 9e &!ss #%e $n"#ion #%e

    n$4ber o i#e4s #o be "o&ied !s 9e22 !s #%e !ddress o #%e !rr!y8 e.,. so4e#%in, 2i:e #%e

    o22o9in, &ro#o#y&e 4i,%# indi"!#e'

    7oid in#"o&y?in# rA8 in# rB8 in# nbr

    9%ere nbr is #%e n$4ber o in#e,ers #o be "o&ied. Yo$ 4i,%# 9!n# #o &2!y 9i#% #%is ide! !nd

    "re!#e !n !rr!y o in#e,ers !nd see i yo$ "!n 9ri#e #%e $n"#ion in#"o&y? !nd 4!:e i# 9or:.

    T%is &er4i#s $sin, $n"#ions #o 4!ni&$2!#e 2!r,e !rr!ys. For e;!4&2e8 i 9e %!7e !n !rr!y o

    /000 in#e,ers #%!# 9e 9!n# #o 4!ni&$2!#e 9i#% ! $n"#ion8 9e need on2y &!ss #o #%!# $n"#ion#%e !ddress o #%e !rr!y ?!nd !ny !$;i2i!ry inor4!#ion s$"% !s nbr !bo7e8 de&endin, on 9%!#

    9e !re doin,. T%e !rr!y i#se2 does no# ,e# &!ssed8 i.e. #%e 9%o2e !rr!y is no# "o&ied !nd

    &$# on #%e s#!": beore "!22in, #%e $n"#ion8 on2y i#s !ddress is sen#.

    T%is is dieren# ro4 &!ssin,8 s!y !n in#e,er8 #o ! $n"#ion. (%en 9e &!ss !n in#e,er 9e

    4!:e ! "o&y o #%e in#e,er8 i.e. ,e# i#s 7!2$e !nd &$# i# on #%e s#!":. (i#%in #%e $n"#ion !ny

    4!ni&$2!#ion o #%e 7!2$e &!ssed "!n in no 9!y ee"# #%e ori,in!2 in#e,er. B$#8 9i#% !rr!ys

    !nd &oin#ers 9e "!n &!ss #%e !ddress o #%e 7!ri!b2e !nd %en"e 4!ni&$2!#e #%e 7!2$es o #%e

    ori,in!2 7!ri!b2es.

    C

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    13/41

    so$r"eiW is #%e s!4e !s ?&i

    In !"#8 #%is is #r$e8 i.e 9%ere7er one 9ri#es !iW i# "!n be re&2!"ed 9i#% ?! i 9i#%o$# !ny

    &rob2e4s. In !"#8 #%e "o4&i2er 9i22 "re!#e #%e s!4e "ode in ei#%er "!se. T%$s 9e see #%!#

    &oin#er !ri#%4e#i" is #%e s!4e #%in, !s !rr!y inde;in,. Ei#%er syn#!; &rod$"es #%e s!4e res$2#.

    T%is is NOT s!yin, #%!# &oin#ers !nd !rr!ys !re #%e s!4e #%in,8 #%ey !re no#. (e !re on2y

    s!yin, #%!# #o iden#iy ! ,i7en e2e4en# o !n !rr!y 9e %!7e #%e "%oi"e o #9o syn#!;es8 one

    $sin, !rr!y inde;in, !nd #%e o#%er $sin, &oin#er !ri#%4e#i"8 9%i"% yie2d iden#i"!2 res$2#s.

    No98 2oo:in, !# #%is 2!s# e;&ression8 &!r# o i#.. ?! i is ! si4&2e !ddi#ion $sin, #%e

    o&er!#or !nd #%e r$2es o " s#!#e #%!# s$"% !n e;&ression is "o44$#!#i7e. T%!# is ?! i is

    iden#i"!2 #o ?i !. T%$s 9e "o$2d 9ri#e ?i ! $s# !s e!si2y !s ?! i.

    B$# ?i ! "o$2d %!7e "o4e ro4 i!W Fro4 !22 o #%is "o4es #%e "$rio$s #r$#% #%!# i'

    "%!r !*0W

    in# i

    9ri#in, !+W K; is #%e s!4e !s 9ri#in,

    +!W K;

    Try i# Se# $& !n !rr!y o "%!r!"#ers8 in#e,ers or 2on,s8 e#". !nd !ssi,ned #%e +rd or -#%

    e2e4en# ! 7!2$e $sin, #%e "on7en#ion!2 !&&ro!"% !nd #%en &rin# o$# #%!# 7!2$e #o be s$re yo$

    %!7e #%!# 9or:in,. T%en re7erse #%e !rr!y no#!#ion !s I %!7e done !bo7e. A ,ood "o4&i2er

    9i22 no# b!2: !nd #%e res$2#s 9i22 be iden#i"!2. A "$riosi#y[ no#%in, 4ore

    No98 2oo:in, !# o$r $n"#ion !bo7e8 9%en 9e 9ri#e'

    des#iW so$r"eiW

    d$e #o #%e !"# #%!# !rr!y inde;in, !nd &oin#er !ri#%4e#i" yie2d iden#i"!2 res$2#s8 9e "!n 9ri#e

    #%is !s'

    ?des# i ?so$r"e i

    B$#8 #%is #!:es * !ddi#ions or e!"% 7!2$e #!:en on by i. Addi#ions8 ,ener!22y s&e!:in,8 #!:e

    4ore #i4e #%!n in"re4en#!#ions ?s$"% !s #%ose done $sin, #%e o&er!#or !s in i. T%is

    4!y no# be #r$e in 4odern oi4iin, "o4&i2ers8 b$# one "!n ne7er be s$re. T%$s8 #%e &oin#er7ersion 4!y be ! bi# !s#er #%!n #%e !rr!y 7ersion.

    Ano#%er 9!y #o s&eed $& #%e &oin#er 7ersion 9o$2d be #o "%!n,e'

    9%i2e ?so$r"e K0 #o si4&2y 9%i2e ?so$r"e

    sin"e #%e 7!2$e 9i#%in #%e &!ren#%esis 9i22 ,o #o ero ?FALSE !# #%e s!4e #i4e in ei#%er "!se.

    A# #%is &oin# yo$ 4i,%# 9!n# #o e;&eri4en# ! bi# 9i#% 9ri#in, so4e o yo$r o9n &ro,r!4s

    $sin, &oin#ers. !ni&$2!#in, s#rin,s is ! ,ood &2!"e #o e;&eri4en#. Yo$ 4i,%# 9!n# #o 9ri#e

    yo$r o9n 7ersions o s$"% s#!nd!rd $n"#ions !s'

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    14/41

    s#r2en?

    s#r"!#?

    s#r"%r?

    !nd !ny o#%ers yo$ 4i,%# %!7e on yo$r sys#e4.

    (e 9i22 "o4e b!": #o s#rin,s !nd #%eir 4!ni&$2!#ion #%ro$,% &oin#ers in ! $#$re "%!er. For

    no98 2e#s 4o7e on !nd dis"$ss s#r$"#$res or ! bi#.

    C

    struct ta'{char lname-; 4* last name *4char "name-; 4* "irst name *4int a'e; 4* a'e *4"loat rate; 4* e.'. 1.03 per hour *4+;

    struct ta' mstruct; 4* declare the structure mstruct *4

    int main(void){strcp(mstruct.lname,?ensen);strcp(mstruct."name,&ed);print"($n%s ,mstruct."name);print"(%s$n,mstruct.lname);return ;+

    end o &ro,r!4 /.1

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    15/41

    No98 #%is &!r#i"$2!r s#r$"#$re is r!#%er s4!22 "o4&!red #o 4!ny $sed in C &ro,r!4s. To #%e

    !bo7e 9e 4i,%# 9!n# #o !dd'd!#eo%ire ?d!#! #y&es no# s%o9n

    d!#eo2!s#r!ise

    2!s#&er"en#in"re!se

    e4er,en"y&%one

    4edi"!2&2!n

    So"i!2SNbr

    e#"[..

    I 9e %!7e ! 2!r,e n$4ber o e4&2oyees8 9%!# 9e 9!n# #o do 4!ni&$2!#e #%e d!#! in #%ese

    s#r$"#$res by 4e!ns o $n"#ions. For e;!4&2e 9e 4i,%# 9!n# ! $n"#ion &rin# o$# #%e n!4e o

    #%e e4&2oyee 2is#ed in !ny s#r$"#$re &!ssed #o i#.

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    16/41

    &ro,r!4 /.*

    #include #include a'e);+

    end o &ro,r!4 /.* 3

    A,!in8 #%is is ! 2o# o inor4!#ion #o !bsorb !# one #i4e. T%e re!der s%o$2d "o4&i2e !nd r$n

    #%e 7!rio$s "ode sni&&e#s !nd $sin, ! deb$,,er 4oni#or #%in,s 2i:e 4ys#r$"# !nd & 9%i2e

    sin,2e s#e&&in, #%ro$,% #%e 4!in !nd o22o9in, #%e "ode do9n in#o #%e $n"#ion #o see 9%!# is

    %!&&enin,.

    C$o#es !nd ! -#% #o %!nd2e #%e #er4in!#in, K0.

    A"#$!22y8 i !22 9e 9!n#ed #o do 9!s s#ore #%e n!4e GTedH 9e "o$2d 9ri#e'

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    17/41

    "%!r 4yn!4eW GTedH

    !nd #%e "o4&i2er 9o$2d "o$n# #%e "%!r!"#ers8 2e!7e roo4 or #%e n$2 "%!r!"#er !nd s#ore #%e

    #o#!2 o #%e o$r "%!r!"#ers in 4e4ory #%e 2o"!#ion o 9%i"% 9o$2d be re#$rned by #%e !rr!y

    n!4e8 in #%is "!se 4ys#rin,.

    In so4e "ode8 ins#e!d o #%e !bo7e8 yo$ 4i,%# see'

    "%!r 4yn!4e GTedH

    9%i"% is !n !2#ern!#e !&&ro!"%. Is #%ere ! dieren"e be#9een #%ese) T%e !ns9er is.. yes. Usin,

    #%e !rr!y no#!#ion - by#es o s#or!,e in #%e s#!#i" 4e4ory b2o": !re #!:en $&8 one or e!"%

    "%!r!"#er !nd one or #%e #er4in!#in, n$2 "%!r!"#er. B$#8 in #%e &oin#er no#!#ion #%e s!4e -

    by#es re>$ired8 &2$s N by#es #o s#ore #%e &oin#er 7!ri!b2e 4yn!4e ?9%ere N de&ends on

    #%e sys#e4 b$# is $s$!22y ! 4ini4$4 o * by#es !nd "!n be - or 4ore.

    In #%e !rr!y no#!#ion8 G4yn!4eH is s%or# or Q4yn!4e0W 9%i"% is #%e !ddress o #%e irs#

    e2e4en# o #%e !rr!y. Sin"e #%e 2o"!#ion o #%e !rr!y is i;ed d$rin, r$n #i4e8 #%is is ! "ons#!n#?no# ! 7!ri!b2e. In #%e &oin#er no#!#ion 4yn!4e is ! 7!ri!b2e. As #o 9%i"% is #%e be##er

    4e#%od8 #%!# de&ends on 9%!# yo$ !re ,oin, #o do 9i#%in #%e res# o #%e &ro,r!4.

    Le#s no9 ,o one s#e& $r#%er !nd "onsider 9%!# %!&&ens i e!"% o #%ese de"2!r!#ions !re

    done 9i#%in ! $n"#ion !s o&&osed #o ,2ob!22y o$#side #%e bo$nds o !ny $n"#ion.

    7oid 4y$n"#ionA?"%!r r

    X

    "%!r !W GABCDEH

    .

    .

    7oid 4y$n"#ionB?"%!r r

    X

    "%!r "& GABCDEH

    .

    .

    $ired on #%ose sys#e4s 9%i"% don# $se #%e48 4y&!r#i"$2!r &ro"essor ?50*5 !nd "o4&i2er ?TC "o4bin!#ion $ses ! s#!":. I 9ro#e ! si4&2e

    &ro,r!4 in"or&or!#in, $n"#ions si4i2!r #o #%ose !bo7e !nd o$nd #%!# in 4y$n"#ionA #%e

    / "%!r!"#ers in #%e s#rin, 9ere !22 s#ored on #%e s#!":. On #%e o#%er %!nd8 in 4y$n"#ionB8

    #%e / "%!r!"#ers 9ere s#ored in #%e d!#! s&!"e !nd #%e &oin#er 9!s s#ored on #%e s#!":.

    By 4!:in, !W s#!#i" I "o$2d or"e #%e "o4&i2er #o &2!"e #%e / "%!r!"#ers in #%e d!#! s&!"e !s

    o&&osed #o #%e s#!":. I did #%is e;er"ise #o &oin# o$# $s# one 4ore dieren"e be#9een de!2in,

    9i#% !rr!ys !nd de!2in, 9i#% &oin#ers. By #%e 9!y8 !rr!y ini#i!2i!#ion o !$#o4!#i" 7!ri!b2es

    !s I %!7e done in 4y$n"#ionA 9!s i22e,!2 in #%e o2der @QR C !nd on2y G"!4e o !,eH in

    #%e ne9er ANSI C. A !"# #%!# 4!y be i4&or#!n# 9%en one is "onsiderin, &or#!bi2i#y !nd

    b!":9!rds "o4&!#ibi2i#y.

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    18/41

    As 2on, !s 9e !re dis"$ssin, #%e re2!#ions%i&Zdieren"es be#9een &oin#ers !nd !rr!ys8 2e#s

    4o7e on #o 4$2#i3di4ension!2 !rr!ys. Consider8 or e;!4&2e #%e !rr!y'

    "%!r 4$2#i/W10W

    J$s# 9%!# does #%is 4e!n) (e228 2e#s "onsider i# in #%e o22o9in, 2i,%#.

    "%!r 4$2#i/W10W

    ````````

    Le#s #!:e #%e $nder2ined &!r# #o be #%e Gn!4eH o !n !rr!y. T%en &re&endin, #%e G"%!rH !nd

    !&&endin, #%e 10W 9e %!7e !n !rr!y o 10 "%!r!"#ers. B$#8 #%e n!4e G4$2#i/WH is i#se2 !n

    !rr!y indi"!#in, #%!# #%ere !re / e2e4en#s e!"% bein, !n !rr!y o 10 "%!r!"#ers.

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    19/41

    ??4$2#i + 1

    (i#% ! 2i##2e #%o$,%# 9e "!n see #%!#'

    ??4$2#i ro9 "o2 !nd 4$2#iro9W"o2W yie2d #%e s!4e res$2#s.

    T%e o22o9in, &ro,r!4 i22$s#r!#es #%is $sin, in#e,er !rr!ys ins#e!d o "%!r!"#er !rr!ys.

    3 &ro,r!4 .1 3#include

    #de"ine @ABC 3#de"ine ADC 1

    int multi-@ABC-ADC;

    int main(void){int ro:, col;"or (ro: = ; ro: < @ABC; ro:66)"or(col = ; col < ADC; col66)multi-ro:-col = ro:*col;"or (ro: = ; ro: < @ABC; ro:66)"or(col = ; col < ADC; col66){print"($n%d ,multi-ro:-col);print"(%d ,*(*(multi 6 ro:) 6 col));+return ;+

    end o &ro,r!4 .1

    Be"!$se o #%e do$b2e de3reeren"in, re>$ired in #%e &oin#er 7ersion8 #%e n!4e o ! *

    di4ension!2 !rr!y is o#en s!id #o be e>$i7!2en# #o ! &oin#er #o ! &oin#er. (i#% ! #%ree

    di4ension!2 !rr!y 9e 9o$2d be de!2in, 9i#% !n !rr!y o !rr!ys o !rr!ys !nd so4e 4i,%# s!y

    i#s n!4e 9o$2d be e>$i7!2en# #o ! &oin#er #o ! &oin#er #o ! &oin#er.

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    20/41

    To $nders#!nd 4ore $22y 9%!# is ,oin, on8 2e# $s re&2!"e

    ?4$2#i ro9 9i#% = !s in'

    ?= "o2

    No98 ro4 #%is 9e see #%!# = is 2i:e ! &oin#er sin"e #%e e;&ression is de3reeren"ed !nd 9e

    :no9 #%!# "o2 is !n in#e,er. $!2 #o #%!# needed #o G&oin# #oH #%e ne;# ro98 9%i"% in #%is "!se 9o$2d be !n !4o$n# e>$!2

    #o COLS sieo?in#.

    T%!# s!ys #%!# i #%e e;&ression ??4$2#i ro9 "o2 is #o be e7!2$!#ed "orre"#2y !# r$n#i4e8 #%e "o4&i2er 4$s# ,ener!#e "ode 9%i"% #!:es in#o "onsider!#ion #%e 7!2$e o COLS8 i.e.

    #%e *nd di4ension. Be"!$se o #%e e>$i7!2en"e o #%e #9o or4s o e;&ression8 #%is is #r$e

    9%e#%er 9e !re $sin, #%e &oin#er e;&ression !s %ere or #%e !rr!y e;&ression 4$2#iro9W"o2W.

    T%$s8 #o e7!2$!#e ei#%er e;&ression8 ! #o#!2 o / 7!2$es 4$s# be :no9n'

    1 T%e !ddress o #%e irs# e2e4en# o #%e !rr!y8 9%i"% is re#$rned by #%e e;&ression G4$2#iH8

    i.e. #%e n!4e o #%e !rr!y.* T%e sie o #%e #y&e o #%e e2e4en#s o #%e !rr!y8 in #%is "!se

    sieo?in#.

    + T%e *nd di4ension o #%e !rr!y

    - T%e s&e"ii" inde; 7!2$e or #%e irs# di4ension8 Gro9H in #%is "!se.

    / T%e s&e"ii" inde; 7!2$e or #%e se"ond di4ension8 G"o2H in #%is "!se.

    ^i7en !22 o #%!#8 "onsider #%e &rob2e4 o desi,nin, ! $n"#ion #o 4!ni&$2!#e #%e e2e4en#

    7!2$es o ! &re7io$s2y de"2!red !rr!y. For e;!4&2e8 one 9%i"% 9o$2d se# !22 #%e e2e4en#s o

    #%e !rr!y G4$2#iH #o #%e 7!2$e 1.7oid se#7!2$e?in# 4!rr!yWCOLSW

    X

    in# ro98 "o2

    or?ro9 0 ro9 M RO(S ro9

    X

    or?"o2 0 "o2 M COLS "o2

    X

    4!rr!yro9W"o2W 1

    And #o "!22 #%is $n"#ion 9e 9o$2d #%en $se'

    se#7!2$e?4$2#i

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    21/41

    No98 9i#%in #%e $n"#ion 9e %!7e $sed #%e 7!2$es deined by RO(S !nd COLS 9%i"% se#

    #%e 2i4i#s on #%e or 2oo&s. B$#8 #%ese deines !re $s# "ons#!n#s !s !r !s #%e "o4&i2er is

    "on"erned8 i.e. #%ere is no#%in, #o "onne"# #%e4 #o #%e !rr!y sie 9i#%in #%e $n"#ion. ro9 !nd

    "o2 !re 2o"!2 7!ri!b2es8 o "o$rse. T%e or4!2 &!r!4e#er deini#ion inor4s #%e "o4&i2er #%!#

    9e !re #!2:in, !bo$# !n in#e,er !rr!y. (e re!22y don# need #%e irs#di4ension !nd8 !s 9i22 be

    seen 2!#er8 #%ere !re o""!sions 9%ere 9e 9o$2d &reer no# #o deine i# 9i#%in #%e &!r!4e#er

    deini#ion so8 o$# o %!bi# or "onsis#en"y8 I %!7e no# $sed i# %ere. B$#8 #%e se"ond di4ension

    4$s# be $sed !s %!s been s%o9n in #%e e;&ression or #%e &!r!4e#er. T%e re!son is #%!# i# is

    needed in #%e e7!2$!#ion o 4!rr!yro9W"o2W !s %!s been des"ribed. T%e re!son is #%!# 9%i2e

    #%e &!r!4e#er deines #%e d!#! #y&e ?in# in #%is "!se !nd #%e !$#o4!#i" 7!ri!b2es or ro9 !nd

    "o2$4n !re deined in #%e or 2oo&s8 on2y one 7!2$e "!n be &!ssed $sin, ! sin,2e &!r!4e#er. In

    #%is "!se8 #%!# is #%e 7!2$e o G4$2#iH !s no#ed in #%e "!22 s#!#e4en#8 i.e. #%e !ddress o #%e irs#

    e2e4en#8 o#en reerred #o !s ! &oin#er #o #%e !rr!y. T%$s8 #%e on2y 9!y 9e %!7e o inor4in,

    #%e "o4&i2er o #%e *nd di4ension is by e;&2i"i#2y in"2$din, i# in #%e &!r!4e#er deini#ion.

    In !"#8 in ,ener!2 !22 di4ensions o %i,%er order #%!n one !re needed 9%en de!2in, 9i#%

    4$2#i3di4ension!2 !rr!ys. T%!# is i 9e !re #!2:in, !bo$# + di4ension!2 !rr!ys8 #%e *nd !nd

    +rd di4ension 4$s# be s&e"iied in #%e &!r!4e#er deini#ion.

    C

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    22/41

    (e no9 #$rn #o #%e &rob2e4 o #%e * di4ension!2 !rr!y. As s#!#ed in #%e 2!s# "%!er8 C

    in#er&re#s ! * di4ension!2 !rr!y !s !n !rr!y o one di4ension!2 !rr!ys. T%!# bein, #%e "!se8

    #%e irs# e2e4en# o ! * di4ension!2 !rr!y o in#e,ers is ! one di4ension!2 !rr!y o in#e,ers.

    And ! &oin#er #o ! #9o di4ension!2 !rr!y o in#e,ers 4$s# be ! &oin#er #o #%!# d!#! #y&e. One

    9!y o !""o4&2is%in, #%is is #%ro$,% #%e $se o #%e :ey9ord G#y&edeH. #y&ede !ssi,ns ! ne9

    n!4e #o ! s&e"iied d!#! #y&e. For e;!4&2e'

    #y&ede $nsi,ned "%!r by#e

    &ro7ides #%e n!4e Gby#eH #o 4e!n #y&e G$nsi,ned "%!rH.

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    23/41

    se"#ion o 4e4ory or #%e s#or!,e o !n !rr!y o in#e,ers !# one &oin# in #i4e8 !nd #%en 9%en

    #%!# 4e4ory is no 2on,er needed i# "!n be reed $& or o#%er $ses8 s$"% !s #%e s#or!,e o !n

    !rr!y o s#r$"#$res.(%en 4e4ory is !22o"!#ed8 #%e !22o"!#in, $n"#ion ?s$"% !s 4!22o"?8

    "!22o"?8 e#". re#$rns ! &oin#er. T%e #y&e o #%is &oin#er de&ends on 9%e#%er yo$ !re $sin, !n

    o2der @QR "o4&i2er or #%e ne9er ANSI #y&e "o4&i2er. (i#% #%e o2der "o4&i2er #%e #y&e o

    #%e re#$rned &oin#er is "%!r8 9i#% #%e ANSI "o4&i2er i# is 7oid.

    I yo$ !re $sin, !n o2der "o4&i2er8 !nd yo$ 9!n# #o !22o"!#e 4e4ory or !n !rr!y o in#e,ers

    yo$ 9i22 %!7e #o "!s# #%e "%!r &oin#er re#$rned #o !n in#e,er &oin#er. For e;!4&2e8 #o !22o"!#e

    s&!"e or 10 in#e,ers 9e 4i,%# 9ri#e'

    in# ir

    ir ?in# 4!22o"?10 sieo?in#

    i?ir NULL

    X .. ERROR ROUTINE ^OES

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    24/41

    I# is !2so #r$e #%!# #%e o22o9in, #9o no#!#ions ,ener!#e #%e s!4e "ode'

    4$2#iro9W ?4$2#i ro9

    Sin"e #%e one on #%e ri,%# 4$s# e7!2$!#e #o ! &oin#er8 #%e !rr!y no#!#ion on #%e 2e# 4$s# !2so

    e7!2$!#e #o ! &oin#er. In !"# 4$2#i0W 9i22 re#$rn ! &oin#er #o #%e irs# in#e,er in #%e irs# ro984$2#i1W ! &oin#er #o #%e irs# in#e,er o #%e se"ond ro98 e#". A"#$!22y8 4$2#inW e7!2$!#es #o !

    &oin#er #o #%!# !rr!y o in#e,ers 9%i"% 4!:es $& #%e n3#% ro9 o o$r * di4ension!2 !rr!y. T%!#

    is8 4$2#i "!n be #%o$,%# o !s !n !rr!y o !rr!ys !nd 4$2#inW !s ! &oin#er #o #%e n3#% !rr!y o

    #%is !rr!y o !rr!ys.

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    25/41

    4!:es #%e &oin#er no#!#ion &redo4in!#e8 e7en #%o$,% #%e !rr!y no#!#ion %!s %i,%er

    &re"eden"e. i.e. %!d 9e 9ri##en

    in# "%!r ;rCOLSW

    9e 9o$2d %!7e deined ;r !s !n !rr!y o &oin#ers %o2din, #%e n$4ber o &oin#ers e>$!2 #o#%!# deined by COLS. (%i"% is no# #%e s!4e #%in, !# !22.

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    26/41

    In #%e !bo7e "ode ro9r is ! &oin#er #o &oin#er #o #y&e in#. In #%is "!se i# &oin#s #o #%e irs#

    e2e4en# o !n !rr!y o &oin#ers #o #y&e in#. Consider #%e n$4ber o "!22s #o 4!22o"?'To ,e# #%e

    !rr!y o &oin#ers 1 "!22

    To ,e# s&!"e or #%e ro9s / "!22s

    To#!2 "!22s

    I yo$ "%oose #o $se #%is !&&ro!"% no#e #%!# 9%i2e yo$ "!n $se #%e !rr!y no#!#ion #o !""ess

    indi7id$!2 e2e4en#s o #%e !rr!y8 e.,. ro9rro9W"o2W 18 i# does no# 4e!n #%!# #%e d!#! in

    #%e G#9o di4ension!2 !rr!yH is "on#i,$o$s in 4e4ory.

    B$#8 yo$ "!n $se #%e !rr!y no#!#ion $s# !s i i# 9ere ! "on#in$o$s b2o": o 4e4ory. For

    e;!4&2e8 yo$ "!n 9ri#e'

    ro9rro9W"o2W 1

    $s# !s i ro9r 9ere #%e n!4e o ! #9o di4ension!2 !rr!y "re!#ed !# "o4&i2e #i4e. O "o$rse

    Kro9 !nd K"o2 4$s# be 9i#%in #%e bo$nds o #%e !rr!y yo$ %!7e "re!#ed8 $s# !s 9i#% !n !rr!y"re!#ed !# "o4&i2e #i4e.

    I i# is desired #o %!7e ! "on#i,$o$s b2o": o 4e4ory dedi"!#ed #o #%e s#or!,e o #%e e2e4en#s

    in #%e !rr!y i# "!n be done !s o22o9s'

    ET

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    27/41

    puts($nHailure to allocate room "or pointers);eit();+4* and no: :e point the pointers *4clrscr();"or(k = ; k < nro:s; k66){rptr-k = aptr 6 (k * ncols);+print"($n$n$nInde Jointer(he) Jointer(dec) Ki"".(dec));

    "or(ro: = ; ro: < nro:s; ro:66){print"($n%d %p %d, ro:, rptr-ro:, rptr-ro:);i"(ro: > )print"( %d,(int)(rptr-ro: 2 rptr-ro:21));+

    "or(ro: = ; ro: < nro:s; ro:66){"or(col = ; col < ncols; col66){rptr-ro:-col = ro: 6 col;print"(%d , rptr-ro:-col);+putchar($n);+puts($n$n$n);

    4* and here :e illustrate that :e are, in "act, dealin' :ith

    a dimensional arra in a conti'uous lock o" memor. *4

    testptr = aptr;"or(ro: = ; ro: < nro:s; ro:66){"or(col = ; col < ncols; col66){print"(%d , *(testptr66));+putchar($n);+return ;

    +

    Consider !,!in8 #%e n$4ber o "!22s #o 4!22o"?To ,e# roo4 or #%e !rr!y i#se2 1 "!22

    To ,e# roo4 or #%e !rr!y o rs 1 "!22

    3

    To#!2 * "!22s

    No98 e!"% "!22 #o 4!22o"? "re!#es !ddi#ion!2 s&!"e o7er%e!d sin"e 4!22o"? is ,ener!22y

    i4&2e4en#ed by #%e o&er!#in, sys#e4 or4in, ! 2in:ed 2is# 9%i"% "on#!ins d!#! "on"ernin, #%e

    sie o #%e b2o":. B$#8 4ore i4&or#!n#2y8 9i#% 2!r,e !rr!ys ?se7er!2 %$ndred ro9s :ee&in,

    #r!": o 9%!# needs #o be reed 9%en #%e #i4e "o4es "!n be 4ore "$4berso4e. T%is8

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    28/41

    "o4bined 9i#% %e "on#i,$o$sness o #%e d!#! b2o": 9%i"% &er4i#s ini#i!2i!#ion #o !22 eroes

    $sin, 4e4se#? 9o$2d see4 #o 4!:e #%e se"ond !2#ern!#i7e #%e &reerred one.

    As ! in!2 e;!4&2e on 4$2#idi4ension!2 !rr!ys 9e 9i22 i22$s#r!#e #%e dyn!4i" !22o"!#ion o !

    #%ree di4ension!2 !rr!y. T%is e;!4&2e 9i22 i22$s#r!#e one 4ore #%in, #o 9!#"% 9%en doin, #%is

    :ind o !22o"!#ion. For re!sons "i#ed !bo7e 9e 9i22 $se #%e !&&ro!"% o$#2ined in !2#ern!#i7e#9o. Consider #%e o22o9in, "ode'

    #include #include #include #include

    int LKIM=15;int NKIM=9;int OKIM=;

    int main(void){char ***space;char ***7rr/K;int , , E;ptrdi""t di"";

    4* "irst :e set aside space "or the arra itsel" *4

    space = malloc(LKIM * NKIM * OKIM * siEeo"(char));

    4* net :e allocate space o" an arra o" pointers, eachto eventuall point to the "irst element o" a dimensional arra o" pointers to pointers *4

    7rr/K = malloc(OKIM * siEeo"(char **));

    4* and "or each o" these :e assi'n a pointer to a ne:lallocated arra o" pointers to a ro: *4

    "or(E = ; E < OKIM; E66){

    7rr/K-E = malloc(NKIM * siEeo"(char *));

    4* and "or each space in this arra :e put a pointer tothe "irst element o" each ro: in the arra spaceori'inall allocated *4

    "or( = ; < NKIM; 66){7rr/K-E- = ((char *)space 6 (E*(LKIM * NKIM) 6 *LKIM));++

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    29/41

    4* 7nd, no: :e check each address in our /K arra to see i"the indein' o" the 7rr/d pointer leads throu'h in acontinuous manner *4

    "or(E = ; E < OKIM; E66){print"(Docation o" arra %d is %p$n, E, *7rr/K-E);"or( = ; < NKIM; 66){print"( 7rra %d and @o: %d starts at %p, E, , 7rr/K-E-);di"" = 7rr/K-E- 2 (char *)space;print"( di"" = %d ,di"");print"( E = %d = %d$n, E, );+'etch();+

    return ;+

    I yo$ %!7e o22o9ed #%is #$#ori!2 $& #o #%is &oin# yo$ s%o$2d %!7e no &rob2e4 de"i&%erin, #%e

    !bo7e on #%e b!sis o #%e "o44en#s !2one. T%ere is one 2ine #%!# deser7es ! bi# o s&e"i!2

    !##en#ion %o9e7er. I# re!ds'Arr+DWyW ??"%!r s&!"e ??=DI YDI

    y=DI

    No#e #%!# %ere Gs&!"eH is "!s# #o ! "%!r!"#er &oin#er8 9%i"% is #%e s!4e #y&e !s Arr+DWyW. A

    #%in, #o be "!re$2 o8 %o9e7er8 is 9%ere #%!# "!s# is 4!de. I #%e "!s# 9ere 4!de o$#side #%e

    o7er!22 &!ren#%esis !s in[

    Arr+DWyW ?"%!r ?s&!"e ??=DI YDI y=DI

    #%e "ode !i2s. T%e re!son is #%!# #%e "!s#8 in #%is "!se8 is no# so 4$"% #o 4!:e #%e #y&es on

    e!"% side o #%e !ssi,n4en# o&er!#or 4!#"%8 !s i# is #o 4!:e #%e &oin#er !ri#%4e#i" 9or:.

    Re"!22 #%!# 9%en de!2in, 9i#% &oin#er !ri#%4e#i" in so4e#%in, 2i:e'

    in# r

    r r 1

    #%e se"ond 2ine in"re4en#s #%e &oin#er by sieo?in#8 9%i"% is * on S3DOS 4!"%ines. No9

    2oo:in, !# #%e 4en#ioned 2ine8 i# s%o$2d be ob7io$s #%!#

    ??=DI YDI y=DI

    "!2"$2!#es #%e n$4ber o !rr!y e2e4en#s T%is 9i22 #$rn o$# #o be !n !ri#%4e#i" "ons#!n# !#er

    #%e "!2"$2!#ion. No9 sin"e 9e !re de!2in, 9i#% !n !rr!y o "%!r!"#ers #%e res$2# o #%e &oin#er

    !ri#%4e#i" 9%i"% !dds #%is 7!2$e #o #%e &oin#er #o #%e s#!r# o #%e !rr!y s%o$2d yie2d ! 7!2$e

    e>$!2 #o #%e &oin#er 7!2$e &2$s #%is "ons#!n#. (ere 9e $sin, !n in# d!#! #y&e8 i.e. "!s#in, o$r

    Gs&!"eH &oin#er #o ?in# 8 #%e !"#$!2 7!2$e by 9%i"% #%e &oin#er 9o$2d be in"re4en#ed 9o$2d

    be #%e "!2"$2!#ed 7!2$e #i4es sieo?in#.

    C

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    30/41

    U& #o #%is &oin# 9e %!7e been dis"$ssin, &oin#ers #o d!#! obe"#s. C !2so &er4i#s #%e

    de"2!r!#ion o &oin#ers #o $n"#ions. Poin#ers #o $n"#ions %!7e ! 7!rie#y o $ses !nd so4e o

    #%e4 9i22 be dis"$ssed %ere.

    Consider #%e o22o9in, re!2 &rob2e4. Yo$ 9!n# #o 9ri#e ! $n"#ion #%!# is "!&!b2e o sor#in,

    7ir#$!22y !ny "o22e"#ion o d!#! #%!# "!n be s#ored in !n !rr!y. T%is 4i,%# be !n !rr!y os#rin,s8 or in#e,ers8 or 2o!#s8 or e7en s#r$"#$res. T%e sor#in, !2,ori#%4 "!n be #%e s!4e or !22.

    For e;!4&2e8 i# "o$2d be ! si4&2e b$bb2e sor# !2,ori#%48 or #%e 4ore "o4&2e; s%e22 or >$i":

    sor# !2,ori#%4. (e22 $se ! si4&2e b$bb2e sor# or de4ons#r!#ion &$r&oses.

    Sed,e9i": 1W %!s des"ribed #%e b$bb2e sor# $sin, C "ode by se##in, $& ! $n"#ion 9%i"%

    9%en &!ssed ! &oin#er #o #%e !rr!y 9o$2d sor# i#. I 9e "!22 #%!# $n"#ion b$bb2e?8 ! sor#

    &ro,r!4 is des"ribed by b$bb2e1."8 9%i"% o22o9s'

    4*22222222222222222222 ule1.c 22222222222222222222*4

    #include

    int arr-1 = { /,5,1,,/,9,,1,0,+;

    void ule(int a-, int F);

    int main(void){int i;putchar($n);"or(i = ; i < 1; i66){

    print"(%d , arr-i);+ule(arr,1);putchar($n);"or(i = ; i < 1; i66){print"(%d , arr-i);+return ;+

    void ule(int a-, int F)

    {int i, j, t;"or(i = F21; i >= ; i22)"or(j = 1; j

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    31/41

    T%e b$bb2e sor# is one o #%e si4&2er sor#s. T%e !2,ori#%4 s"!ns #%e !rr!y ro4 #%e se"ond #o

    #%e 2!s# e2e4en# "o4&!rin, e!"% e2e4en# 9i#% #%e one 9%i"% &re"edes i#. I #%e one #%!#

    &re"edes i# is 2!r,er #%!n #%e "$rren# e2e4en#8 #%e #9o !re s9!&&ed so #%e 2!r,er one is "2oser

    #o #%e end o #%e !rr!y. On #%e irs# &!ss8 #%is res$2#s in #%e 2!r,es# e2e4en# endin, $& !# #%e

    end o #%e !rr!y. T%e !rr!y is no9 2i4i#ed #o !22 e2e4en#s e;"e #%e 2!s# !nd #%e &ro"ess

    re&e!#ed. T%is &$#s #%e ne;# 2!r,es# e2e4en# !# ! &oin# &re"edin, #%e 2!r,es# e2e4en#. T%e

    &ro"ess is re&e!#ed or ! n$4ber o #i4es e>$!2 #o #%e n$4ber o e2e4en#s 4in$s 1. T%e end

    res$2# is ! sor#ed !rr!y.= ; i22)"or(j = 1; j

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    32/41

    a-j = t;++

    int compare(int m, int n){return (m > n);+4*222222222222222222222 end o" ule.c22222222222222222222222*4

    I o$r ,o!2 is #o 4!:e o$r sor# ro$#ine d!#! #y&e inde&enden#8 one 9!y o doin, #%is is #o $se

    &oin#ers #o #y&e 7oid #o &oin# #o #%e d!#! ins#e!d o $sin, #%e in#e,er d!#! #y&e. As ! s#!r# in

    #%!# dire"#ion 2e#s 4odiy ! e9 #%in,s in #%e !bo7e so #%!# &oin#ers "!n be $sed. To be,in

    9i#%8 9e22 s#i": 9i#% &oin#ers #o #y&e in#e,er.

    4*22222222222222222222222 ule/.c

    2222222222222222222222222*4#include

    int arr-1 = { /,5,1,,/,9,,1,0,+;

    void ule(int *p, int F);int compare(int *m, int *n);

    int main(void){int i;putchar($n);

    "or(i = ; i < 1; i66){print"(%d , arr-i);+ule(arr,1);putchar($n);"or(i = ; i < 1; i66){print"(%d , arr-i);+return ;+

    void ule(int *p, int F){int i, j, t;"or(i = F21; i >= ; i22)"or(j = 1; j

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    33/41

    int compare(int *m, int *n){return (*m > *n);+4*222222222222222222 end o" ule/.c2222222222222222222222222*4

    No#e #%e "%!n,es. (e !re no9 &!ssin, ! &oin#er #o !n in#e,er ?or !rr!y o in#e,ers #o

    b$bb2e?. And ro4 9i#%in b$bb2e 9e !re &!ssin, &oin#ers #o #%e e2e4en#s o #%e !rr!y #%!# 9e

    9!n# #o "o4&!re #o o$r "o4&!rison $n"#ion. And8 o "o$rse 9e !re dereeren"in, #%ese

    &oin#er in o$r "o4&!re? $n"#ion in order #o 4!:e #%e !"#$!2 "o4&!rison. O$r ne;# s#e& 9i22

    be #o "on7er# #%e &oin#ers in b$bb2e? #o &oin#ers #o #y&e 7oid so #%!# #%!# $n"#ion 9i22 be"o4e

    4ore #y&e insensi#i7e. T%is is s%o9n in b$bb2e-.

    4*222222222222222222 ule.c 2222222222222222222222222222*4#include

    int arr-1 = { /,5,1,,/,9,,1,0,+;

    void ule(int *p, int F);int compare(void *m, void *n);

    int main(void){int i;putchar($n);"or(i = ; i < 1; i66){print"(%d , arr-i);

    +ule(arr,1);putchar($n);"or(i = ; i < 1; i66){print"(%d , arr-i);+return ;+

    void ule(int *p, int F){int i, j, t;"or(i = F21; i >= ; i22)"or(j = 1; j

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    34/41

    m1 = (int *)m;n1 = (int *)n;return (*m1 > *n1);+4*222222222222222222 end o" ule.c 222222222222222222222*4

    No#e #%!#8 in doin, #%is8 in "o4&!re? 9e %!d #o in#rod$"e #%e "!s#in, o #%e 7oid &oin#er #y&es

    &!ssed #o #%e !"#$!2 #y&e bein, sor#ed. B$#8 !s 9e22 see 2!#er #%!#s o:!y. And sin"e 9%!# is

    bein, &!ssed #o b$bb2e? is s#i22 ! &oin#er #o !n !rr!y o in#e,ers8 9e %!d #o "!s# #%ese &oin#ers

    #o 7oid &oin#ers 9%en 9e &!ssed #%e4 !s &!r!4e#ers in o$r "!22 #o "o4&!re?.(e no9 !ddress

    #%e &rob2e4 o 9%!# 9e &!ss #o b$bb2e?. (e 9!n# #o 4!:e #%e irs# &!r!4e#er o #%!# $n"#ion

    ! 7oid &oin#er !2so. B$#8 #%!# 4e!ns #%!# 9i#%in b$bb2e? 9e need #o do so4e#%in, !bo$# #%e

    7!ri!b2e #8 9%i"% is "$rren#2y !n in#e,er. A2so8 9%ere 9e $se # &31W #%e #y&e o &31W

    needs #o be :no9n in order#o :no9 %o9 4!ny by#es #o "o&y #o #%e 7!ri!b2e # ?or 9%!#e7er 9e

    re&2!"e # 9i#%.

    C$rren#2y8 in b$bb2e-."8 :no92ed,e 9i#%in b$er? !s #o #%e #y&e o #%e d!#! bein, sor#ed

    ?!nd %en"e #%e sie o e!"% indi7id$!2 e2e4en# is ob#!ined ro4 #%e !"# #%!# #%e irs#&!r!4e#er is ! &oin#er #o #y&e in#e,er. I 9e !re ,oin, #o be !b2e #o $se b$bb2e? #o sor# !ny

    #y&e o d!#!8 9e need #o 4!:e #%!# &oin#er ! &oin#er #o #y&e 7oid. B$#8 in doin, so 9e !re

    ,oin, #o 2ose inor4!#ion "on"ernin, #%e sie o indi7id$!2 e2e4en#s 9i#%in #%e !rr!y. So8 in

    b$bb2e/." 9e 9i22 !dd ! se&!r!#e &!r!4e#er #o %!nd2e #%is sie inor4!#ion.

    T%ese "%!n,es8 ro4 b$bb2e-." #o b$bb2e/." !re8 &er%!&s8 ! bi# 4ore e;#ensi7e #%!n #%ose 9e

    %!7e 4!de in #%e &!s#. So8 "o4&!re #%e #9o 4od$2es "!re$22y or dieren"es.

    4*2222222222222222222222 ule3.c222222222222222222222222222*4#include

    #include

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    35/41

    void ule(void *p, siEet :idth, int F){int i, j;unsi'ned char u"-;unsi'ned char *p = p;"or(i = F21; i >= ; i22)"or(j = 1; j

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    36/41

    lon' arr-1 = { /,5,1,,/,9,,1,0,+;

    char arr-3- = { Micke Mouse,Konald Kuck,Minnie Mouse,Poo",&ed ?ensen +;

    void ule(void *p, int :idth, int F);int compare(void *m, void *n);

    int main(void){int i;putchar($n);"or(i = ; i < 3; i66){

    print"(%s$n, arr-i);+ule(arr, , 3);putchar($n$n);"or(i = ; i < 3; i66){print"(%s$n, arr-i);+return ;+

    void ule(void *p, int :idth, int F)

    {int i, j, k;unsi'ned char u"-M7L8GH;unsi'ned char *p = p;"or(i = F21; i >= ; i22)"or(j = 1; j

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    37/41

    B$#8 #%e !"# #%!# b$bb2e? 9!s $n"%!n,ed ro4 #%!# $sed in b$bb2e/." indi"!#es #%!# #%!#

    $n"#ion is "!&!b2e o sor#in, ! 9ide 7!rie#y o d!#! #y&es. (%!# is 2e# #o do is #o &!ss #o

    b$bb2e? #%e n!4e o #%e "o4&!rison $n"#ion 9e 9!n# #o $se so #%!# i# "!n be #r$2y $ni7ers!2.

    J$s# !s #%e n!4e o !n !rr!y is #%e !ddress o #%e irs# e2e4en# o #%e !rr!y in #%e d!#! se,4en#8

    #%e n!4e o ! $n"#ion de"!ys in#o #%e !ddress o #%!# $n"#ion in #%e "ode se,4en#. T%$s 9e

    need #o $se ! &oin#er #o ! $n"#ion. In #%is "!se #%e "o4&!rison $n"#ion.Poin#ers #o $n"#ions

    4$s# 4!#"% #%e $n"#ions &oin#ed #o in #%e n$4ber !nd #y&es o #%e &!r!4e#ers !nd #%e #y&e o

    #%e re#$rn 7!2$e. In o$r "!se8 9e de"2!re o$r $n"#ion &oin#er !s'

    in# ?r?"ons# 7oid &18 "ons# 7oid &*

    No#e #%!# 9ere 9e #o 9ri#e'

    in# r?"ons# 7oid &18 "ons# 7oid &*

    9e 9o$2d %!7e ! $n"#ion &ro#o#y&e or ! $n"#ion 9%i"% re#$rned ! &oin#er #o #y&e in#. T%!# is

    be"!$se in C #%e &!ren#%esis ? o&er!#or %!7e ! %i,%er &re"eden"e #%!n #%e &oin#er o&er!#or.

    By &$##in, #%e &!ren#%esis !ro$nd #%e s#rin, ?r 9e indi"!#e #%!# 9e !re de"2!rin, !$n"#ion &oin#er.

    (e no9 4odiy o$r de"2!r!#ion o b$bb2e? by !ddin,8 !s i#s -#% &!r!4e#er8 ! $n"#ion &oin#er

    o #%e &ro&er #y&e. I#s $n"#ion &ro#o#y&e be"o4es'

    7oid b$bb2e?7oid &8 in# 9id#%8 in# N8

    in#?r?"ons# 7oid 8 "ons# 7oid

    (%en 9e "!22 #%e b$bb2e?8 9e inser# #%e n!4e o #%e "o4&!rison $n"#ion #%!# 9e 9!n# #o

    $se. b$bb2e." i22$s#r!#e %o9 #%is !&&ro!"% &er4i#s #%e $se o #%e s!4e b$bb2e? $n"#ion or

    sor#in, dieren# #y&es o d!#!.

    4*2222222222222222222 ule0.c 222222222222222222*4#include #include

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    38/41

    print"(%ld ,arr-i);+puts($n);"or(i = ; i < 3; i66) 4* sho: the strin's *4{print"(%s$n, arr-i);+ule(arr, , 1, comparelon'); 4* sort the lon's *4ule(arr, , 3, comparestrin'); 4* sort the strin's *4puts($n$n7"ter Cortin'Q$n);"or(i = ; i < 1; i66) 4* sho: the sorted lon's *4{print"(%d ,arr-i);+puts($n);"or(i = ; i < 3; i66) 4* sho: the sorted strin's *4{print"(%s$n, arr-i);+return ;+

    void ule(void *p, int :idth, int F,int(*"ptr)(const void *, const void *)){int i, j, k;unsi'ned char u"-M7L8GH;unsi'ned char *p = p;"or(i = F21; i >= ; i22)

    "or(j = 1; j ){memcp(u", p 6 :idth*(j21), :idth);memcp(p 6 :idth*(j21), p 6 j*:idth , :idth);memcp(p 6 j*:idth, u", :idth);+++

    int comparestrin'(const void *m, const void *n){char *m1 = (char *)m;char *n1 = (char *)n;return (strcmp(m1,n1));+

    int comparelon'(const void *m, const void *n){lon' *m1, *n1;m1 = (lon' *)m;n1 = (lon' *)n;

    return (*m1 > *n1);

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    39/41

    +4*22222222222222222 end o" ule0.c 22222222222222222*4

    Re%erences %or ,apter 1

    1! "A'goritms in ,+

    Rober# Sed,e9i":

    Addison3(es2ey

    ISBN 03*013/1-*/3

    EPILO^

    I %!7e 9ri##en #%e &re"edin, 4!#eri!2 #o &ro7ide !n in#rod$"#ion #o &oin#ers or ne9"o4ers #o

    C. In C8 #%e 4ore one $nders#!nds !bo$# &oin#ers #%e ,re!#er 2e;ibi2i#y one %!s in #%e 9ri#in,

    o "ode. T%e !bo7e e;&!nds on 4y irs# eor# !# #%is 9%i"% 9!s en#i#2ed r%e2&.#;# !nd

    o$nd in !n e!r2y 7ersion o Bob S#o$#s "o22e"#ion o C "ode SNIPPETS. T%is 7ersion 9i22 be

    in"2$ded in #%e ne;# 7ersion o SNIPPETS #o be re2e!sed in 2!#e O"#ober o 166/. I !4 !29!ys

    re!dy #o !""e "ons#r$"#i7e "ri#i"is4 on #%is 4!#eri!28 or re7ie9 re>$es#s or #%e !ddi#ion o

    o#%er re2e7!n# 4!#eri!2. T%ereore8 i yo$ %!7e >$es#ions8 "o44en#s8 "ri#i"is4s8 e#".

    "on"ernin, #%!# 9%i"% %!s been &resen#ed8 I 9o$2d ,re!#2y !&&re"i!#e yo$r "on#!"#in, 4e

    $sin, one o #%e 4!i2 !ddresses "i#ed in #%e In#rod$"#ion.

    Co44en#s !re "2osed.

    Recent Posts

    o (%!# bi22in, !nd &$r"%!se #r!"[

    o ^e# #o& 4!" !&&s or ree 9i[

    o J$s# $2i22ed !no#%er &%o#o o[

    o I44inen# i4&!"# !"

  • 8/13/2019 Tutorial on Pointers and Arrays in c

    40/41

    o !r"% *006 ?/

    o Febr$!ry *006 ?-

    o J!n$!ry *006 ?

    o De"e4ber *005 ?1

    o No7e4ber *005 ?5

    o O"#ober *005 ?

    o See4ber *005 ?1*

    Categories

    o C !nd ASP.Ne# ?1

    o ^ener!2 s#$ ?6

    o IT ?1/

    o P%o#o,r!&%y ?

    o (eb Desi,n ?

    ags

    /d+0d!s&.ne#!$diob!n:sbb""C!non"re!#i7e"redi# "r$n"%de2e,!#esdesi,n

    di,i#!2do#ne#En"odin,eose7en#sor4!##in,r!4e9or: *.0r!4e9or: +./

    ,o7ern4en#%o$sin,IT2i7e4ess!,in,4i"roso#ne#9or:P%o#o,r!&%y&or#r!i#s

    &ro,r!44in,So":e#E;"eionSo":e#P!":e#so":e#sScL Ser7er#""&iobi2e#9i##er7is$!2 s#$dio7od!one7s*00/7s*0059ebdesi,n9eddin,s9indo9s

    Pages

    o y Proi2e

    o O2d Pro,r!44in, re2!#ed "on#en#

    A Lis# O R$2es T%!# E7ery C Pro,r!44er S%o$2d Fo22o9

    A #$#ori!2 on IZO S#re!4s

    A TUTORIAL ON POINTERS AND ARRAYS IN C

    An Asse4b2y L!n,$!,e Pri4er?C 165+ by D!7id (%i#4!n

    C Fre>$en#2y As:ed c$es#ions ?FAc F$22 Version

    C O&er!#ors by Jo%n . D2$,os

    C O7er7ie9 by Jo%n T!2

    CZC N$22 Poin#ers

    "o4&.2!n,." Ans9ers #o Fre>$en#2y As:ed c$es#ions ?FAc Lis#

    De2&%i Ti&s

    http://blog.xploiter.com/2009/03/http://blog.xploiter.com/2009/02/http://blog.xploiter.com/2009/01/http://blog.xploiter.com/2008/12/http://blog.xploiter.com/2008/11/http://blog.xploiter.com/2008/10/http://blog.xploiter.com/2008/09/http://blog.xploiter.com/category/c-and-aspnet/http://blog.xploiter.com/category/general-stuff/http://blog.xploiter.com/category/it/http://blog.xploiter.com/category/photography/http://blog.xploiter.com/category/web-design/http://blog.xploiter.com/tag/5d/http://blog.xploiter.com/tag/30d/http://blog.xploiter.com/tag/30d/http://blog.xploiter.com/tag/aspnet/http://blog.xploiter.com/tag/audio/http://blog.xploiter.com/tag/audio/http://blog.xploiter.com/tag/banks/http://blog.xploiter.com/tag/banks/http://blog.xploiter.com/tag/bbc/http://blog.xploiter.com/tag/c/http://blog.xploiter.com/tag/c/http://blog.xploiter.com/tag/canon/http://blog.xploiter.com/tag/creative/http://blog.xploiter.com/tag/creative/http://blog.xploiter.com/tag/creative/http://blog.xploiter.com/tag/credit-crunch/http://blog.xploiter.com/tag/delegates/http://blog.xploiter.com/tag/delegates/http://blog.xploiter.com/tag/delegates/http://blog.xploiter.com/tag/design/http://blog.xploiter.com/tag/digital/http://blog.xploiter.com/tag/dotnet/http://blog.xploiter.com/tag/dotnet/http://blog.xploiter.com/tag/encoding/http://blog.xploiter.com/tag/encoding/http://blog.xploiter.com/tag/eos/http://blog.xploiter.com/tag/events/http://blog.xploiter.com/tag/events/http://blog.xploiter.com/tag/events/http://blog.xploiter.com/tag/formatting/http://blog.xploiter.com/tag/framework-20/http://blog.xploiter.com/tag/framework-20/http://blog.xploiter.com/tag/framework-20/http://blog.xploiter.com/tag/framework-35/http://blog.xploiter.com/tag/government/http://blog.xploiter.com/tag/housing/http://blog.xploiter.com/tag/housing/http://blog.xploiter.com/tag/it/http://blog.xploiter.com/tag/it/http://blog.xploiter.com/tag/live/http://blog.xploiter.com/tag/messaging/http://blog.xploiter.com/tag/messaging/http://blog.xploiter.com/tag/microsoft/http://blog.xploiter.com/tag/microsoft/http://blog.xploiter.com/tag/network/http://blog.xploiter.com/tag/network/http://blog.xploiter.com/tag/network/http://blog.xploiter.com/tag/photography/http://blog.xploiter.com/tag/photography/http://blog.xploiter.com/tag/portraits/http://blog.xploiter.com/tag/programming/http://blog.xploiter.com/tag/socketexception/http://blog.xploiter.com/tag/socketexception/http://blog.xploiter.com/tag/socketpacket/http://blog.xploiter.com/tag/socketpacket/http://blog.xploiter.com/tag/sockets/http://blog.xploiter.com/tag/sockets/http://blog.xploiter.com/tag/sql-server/http://blog.xploiter.com/tag/sql-server/http://blog.xploiter.com/tag/tcp/http://blog.xploiter.com/tag/tcpip/http://blog.xploiter.com/tag/tcpip/http://blog.xploiter.com/tag/tcpip/http://blog.xploiter.com/tag/tmobile/http://blog.xploiter.com/tag/twitter/http://blog.xploiter.com/tag/visual-studio/http://blog.xploiter.com/tag/visual-studio/http://blog.xploiter.com/tag/visual-studio/http://blog.xploiter.com/tag/vodafone/http://blog.xploiter.com/tag/vs2005/http://blog.xploiter.com/tag/vs2008/http://blog.xploiter.com/tag/vs2008/http://blog.xploiter.com/tag/vs2008/http://blog.xploiter.com/tag/webdesign/http://blog.xploiter.com/tag/weddings/http://blog.xploiter.com/tag/windows/http://blog.xploiter.com/tag/windows/http://blog.xploiter.com/simon-steed-profile/http://blog.xploiter.com/programming-related-content/http://blog.xploiter.com/programming-related-content/list-rules-programmer-follow/http://blog.xploiter.com/programming-related-content/tutorial-io-streams/http://blog.xploiter.com/programming-related-content/tutorial-pointers-arrays/http://blog.xploiter.com/programming-related-content/an-assembly-language-primer/http://blog.xploiter.com/programming-related-content/frequently-asked-questions-faq-full-version/http://blog.xploiter.com/programming-related-content/operators-john-dlugosz/http://blog.xploiter.com/programming-related-content/overview-john-tal/http://blog.xploiter.com/programming-related-content/cc-null-pointers/http://blog.xploiter.com/programming-related-content/complangc-answers-frequently-asked-questions-faq-list/http://blog.xploiter.com/programming-related-content/delphi-tips/http://blog.xploiter.com/2009/03/http://blog.xploiter.com/2009/02/http://blog.xploiter.com/2009/01/http://blog.xploiter.com/2008/12/http://blog.xploiter.com/2008/11/http://blog.xploiter.com/2008/10/http://blog.xploiter.com/2008/09/http://blog.xploiter.com/category/c-and-aspnet/http://blog.xploiter.com/category/general-stuff/http://blog.xploiter.com/category/it/http://blog.xploiter.com/category/photography/http://blog.xploiter.com/category/web-design/http://blog.xploiter.com/tag/5d/http://blog.xploiter.com/tag/30d/http://blog.xploiter.com/tag/aspnet/http://blog.xploiter.com/tag/audio/http://blog.xploiter.com/tag/banks/http://blog.xploiter.com/tag/bbc/http://blog.xploiter.com/tag/c/http://blog.xploiter.com/tag/canon/http://blog.xploiter.com/tag/creative/http://blog.xploiter.com/tag/credit-crunch/http://blog.xploiter.com/tag/delegates/http://blog.xploiter.com/tag/design/http://blog.xploiter.com/tag/digital/http://blog.xploiter.com/tag/dotnet/http://blog.xploiter.com/tag/encoding/http://blog.xploiter.com/tag/eos/http://blog.xploiter.com/tag/events/http://blog.xploiter.com/tag/formatting/http://blog.xploiter.com/tag/framework-20/http://blog.xploiter.com/tag/framework-35/http://blog.xploiter.com/tag/government/http://blog.xploiter.com/tag/housing/http://blog.xploiter.com/tag/it/http://blog.xploiter.com/tag/live/http://blog.xploiter.com/tag/messaging/http://blog.xploiter.com/tag/microsoft/http://blog.xploiter.com/tag/network/http://blog.xploiter.com/tag/photography/http://blog.xploiter.com/tag/portraits/http://blog.xploiter.com/tag/programming/http://blog.xploiter.com/tag/socketexception/http://blog.xploiter.com/tag/socketpacket/http://blog.xploiter.com/tag/sockets/http://blog.xploiter.com/tag/sql-server/http://blog.xploiter.com/tag/tcp/http://blog.xploiter.com/tag/tcpip/http://blog.xploiter.com/tag/tmobile/http://blog.xploiter.com/tag/twitter/http://blog.xploiter.com/tag/visual-studio/http://blog.xploiter.com/tag/vodafone/http://blog.xploiter.com/tag/vs2005/http://blog.xploiter.com/tag/vs2008/http://blog.xploiter.com/tag/webdesign/http://blog.xploiter.com/tag/weddings/http://blog.xploiter.com/tag/windows/http://blog.xploiter.com/simon-steed-profile/http://blog.xploiter.com/programming-related-content/http://blog.xploiter.com/programming-related-content/list-rules-programmer-follow/http://blog.xploiter.com/programming-related-content/tutorial-io-streams/http://blog.xploiter.com/programming-related-content/tutorial-pointers-arrays/http://blog.xploiter.com/programming-related-content/an-assembly-language-primer/http://blog.xploiter.com/programming-related-content/frequently-asked-questions-faq-full-version/http://blog.xploiter.com/programming-related-content/operators-john-dlugosz/http://blog.xploiter.com/programming-related-content/overview-john-tal/http://blog.xploiter.com/programming-related-content/cc-null-pointers/http://blog.xploiter.com/programming-related-content/complangc-answers-frequently-asked-questions-faq-list/http://blog.xploiter.com/programming-related-content/delphi-tips/
  • 8/13/2019 Tutorial on Pointers and Arrays in c

    41/41

    De2&%i T$#ori!2 Lesson 1 1*Z*6Z65 Fr!n: For#ino or#inos7n.ne#

    Co&yri,%# 1666

    De2&%i T$#ori!2 Lesson * ore De2&%i S#$ 1Z-Z66 Fr!n: For#ino

    or#inos7n.ne# Co&yri,%# 1666

    ^ener!2 S#e&s in Con7er#in, C !&&2i"!#ions #o C