chapter6 - pointer

Upload: azman-ahmad

Post on 02-Apr-2018

237 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/27/2019 Chapter6 - Pointer

    1/38

    C h a p t e r 6

    P o i n t e r s

    I n t h e p r e c e d i n g c h a p t e r s , o u r p r o g r a m s h a v e b e e n w r i t t e n t o a c c e s s o b j e c t s d i r e c t l y , i . e . u s i n g

    t h e v a r i a b l e n a m e s . W e h a v e p o s t p o n e d u n t i l n o w a d i s c u s s i o n o f t h e c o n c e p t o f i n d i r e c t a c c e s s ,

    i . e . a c c e s s o f o b j e c t s u s i n g t h e i r a d d r e s s . A s w e h a v e s e e n , v a r i a b l e s l o c a l t o a f u n c t i o n m a y

    b e a c c e s s e d u s i n g t h e i r n a m e o n l y w i t h i n t h a t f u n c t i o n . W h e n a r g u m e n t s a r e p a s s e d t o a n o t h e r

    f u n c t i o n , o n l y t h e v a l u e s a r e p a s s e d , a n d t h e c a l l e d f u n c t i o n m a y u s e t h e s e v a l u e s , b u t c a n n o t

    a e c t t h e v a r i a b l e c e l l s i n t h e c a l l i n g f u n c t i o n . S o m e t i m e s , h o w e v e r , a f u n c t i o n n e e d s t o h a v e

    d i r e c t a c c e s s t o t h e c e l l s i n a n o t h e r f u n c t i o n . T h i s c a n b e d o n e i n C t h r o u g h i n d i r e c t a c c e s s , u s i n g

    t h e a d d r e s s o f t h e c e l l , c a l l e d a p o i n t e r

    I n t h i s c h a p t e r , w e w i l l i n t r o d u c e t h e c o n c e p t s o f i n d i r e c t a c c e s s , p o i n t e r t y p e s , a n d d e r e f e r e n c e d

    p o i n t e r v a r i a b l e s . W e w i l l u s e t h e s e c o n c e p t s t o w r i t e f u n c t i o n s t h a t i n d i r e c t l y a c c e s s o b j e c t s i n a

    c a l l i n g f u n c t i o n .

    6 . 1 W h a t i s a P o i n t e r ?

    F r e q u e n t l y , a c a l l e d f u n c t i o n n e e d s t o m a k e c h a n g e s t o o b j e c t s d e c l a r e d i n t h e c a l l i n g f u n c t i o n . F o r

    e x a m p l e , t h e f u n c t i o n , s c a n f ( ) , n e e d s t o a c c e s s o b j e c t s i n t h e c a l l i n g f u n c t i o n t o s t o r e t h e d a t a

    r e a d a n d c o n v e r t e d i n t o a n o b j e c t d e n e d t h e r e . T h e r e f o r e , w e s u p p l y s c a n f ( ) w i t h t h e a d d r e s s

    o f o b j e c t s r a t h e r t h a n t h e i r v a l u e s . H e r e , w e w i l l s e e h o w a n y f u n c t i o n c a n i n d i r e c t l y a c c e s s a n

    o b j e c t b y i t s a d d r e s s .

    A n o t h e r c o m m o n u s e o f p o i n t e r s i s t o w r i t e f u n c t i o n s t h a t \ r e t u r n " m o r e t h a n o n e v a l u e . A s

    w e h a v e s e e n , e v e r y f u n c t i o n i n C r e t u r n s a v a l u e a s t h e v a l u e o f t h e f u n c t i o n h o w e v e r , i f a

    f u n c t i o n ' s m e a n i n g i n c l u d e s t h e r e t u r n o f s e v e r a l p i e c e s o f i n f o r m a t i o n , t h i s s i n g l e r e t u r n v a l u e

    i s n o t s u c i e n t . I n t h e s e c a s e s , w e c a n h a v e t h e f u n c t i o n r e t u r n m u l t i p l e d a t a v a l u e s i n d i r e c t l y ,

    u s i n g p o i n t e r s .

    2 5 5

  • 7/27/2019 Chapter6 - Pointer

    2/38

  • 7/27/2019 Chapter6 - Pointer

    3/38

    6 . 1 . W H A T I S A P O I N T E R ? 2 5 7

    o r ,

    i n t * i p t r

    ( w h i t e s p a c e m a y s e p a r a t e t h e o p e r a t o r , * , a n d t h e v a r i a b l e n a m e , i p t r ) . T h e d e c l a r a t i o n s p e c i e s

    a v a r i a b l e , i p t r , o f t y p e i n t * , i . e . i n t e g e r p o i n t e r ( t h e t y p e i s r e a d d i r e c t l y f r o m t h e d e c l a r a t i o n ) .

    S o , i n t * i s t h e t y p e o f i p t r , a n d i n t i s t h e t y p e o f * i p t r | t h e t h i n g i t p o i n t s t o . T h i s s t a t e m e n t

    d e c l a r e s a n i n t e g e r p o i n t e r v a r i a b l e , i p t r , a n d a l l o c a t e s m e m o r y f o r a p o i n t e r v a r i a b l e . S i m i l a r l y ,

    w e c a n d e c l a r e f l o a t p o i n t e r s o r c h a r a c t e r p o i n t e r s :

    f l o a t * p a , * p b

    c h a r * p c

    T h e s e s t a t e m e n t s d e c l a r e v a r i a b l e s , p a a n d p b , w h i c h c a n p o i n t t o f l o a t t y p e o b j e c t s , a n d p c

    w h i c h c a n p o i n t t o a c h a r t y p e o b j e c t . A l l p o i n t e r v a r i a b l e s s t o r e a d d r e s s e s , w h i c h a r e u n s i g n e d

    i n t e g e r s , a n d s o n e e d t h e s a m e a m o u n t o f m e m o r y s p a c e r e g a r d l e s s o f t h e p o i n t e r t y p e s .

    S i n c e t h e c o m p i l e r n o w k n o w s t h a t i p t r p o i n t s t o a n i n t e g e r o b j e c t , i t c a n a c c e s s t h e o b j e c t

    c o r r e c t l y . O u r s i m p l e p r o g r a m b e c o m e s :

    m a i n ( )

    { i n t x

    i n t * i p t r

    p r i n t f ( " * * * T e s t i n g P o i n t e r V a r i a b l e s * * * \ n " )

    x = 1 0

    i p t r = & x

    p r i n t f ( " A d d r e s s % d h o l d s v a l u e % d \ n " , i p t r , * i p t r )

    }

    w h i c h p r o d u c e s t h e o u t p u t :

    * * * T e s t i n g P o i n t e r V a r i a b l e s * * *

    A d d r e s s 1 0 0 0 h o l d s v a l u e 1 0

    W e a r e g e n e r a l l y n o t i n t e r e s t e d i n t h e v a l u e o f t h e p o i n t e r v a r i a b l e i t s e l f i t m a y e v e n b e d i e r e n t

    e a c h t i m e a p r o g r a m i s r u n . I n s t e a d , w e a r e i n t e r e s t e d i n t h e c e l l t h e p o i n t e r i s p o i n t i n g t o , s o

    w e i n d i c a t e t h e v a l u e o f a p o i n t e r v a r i a b l e i n d i a g r a m s a n d p r o g r a m t r a c e s u s i n g a n a r r o w ( ) a s

    s h o w n i n F i g u r e 6 . 1 b .

    I n s u m m a r y , t h e a d d r e s s o f a n o b j e c t i s c a l l e d a p o i n t e r t o t h a t o b j e c t s i n c e t h e a d d r e s s t e l l s

    o n e w h e r e t o g o i n o r d e r t o a c c e s s t h e o b j e c t . T h e a d d r e s s b y i t s e l f d o e s n o t p r o v i d e s u c i e n t

  • 7/27/2019 Chapter6 - Pointer

    4/38

    2 5 8 C H A P T E R 6 . P O I N T E R S

    m a i n ( )

    m a i n ( )

    a )

    b )

    i n t x i n t i p t r

    i n t * i p t ri n t x

    1 0 1 0 0 0

    1 0

    F i g u r e 6 . 1 : D e c l a r i n g P o i n t e r V a r i a b l e s

  • 7/27/2019 Chapter6 - Pointer

    5/38

    6 . 1 . W H A T I S A P O I N T E R ? 2 5 9

    i n f o r m a t i o n t o a c c e s s a n o b j e c t w e m u s t k n o w w h a t t y p e o f o b j e c t t h e a d d r e s s i s p o i n t i n g t o .

    I f t h e p o i n t e r ( a d d r e s s ) v a l u e a n d t h e d a t a t y p e o f t h e o b j e c t t h a t i t p o i n t s t o a r e b o t h k n o w n ,

    t h e n i t i s p o s s i b l e t o a c c e s s t h e o b j e c t c o r r e c t l y . I n o t h e r w o r d s , p o i n t e r s m u s t b e s p e c i e d t o b e

    i n t p o i n t e r s , p o i n t i n g t o a n i n t e g e r t y p e o b j e c t , f l o a t p o i n t e r s , p o i n t i n g t o a o a t i n g p o i n t t y p e

    o b j e c t , c h a r p o i n t e r s , e t c .

    6 . 1 . 2 I n d i r e c t A c c e s s o f V a l u e s

    T h e i n d i r e c t i o n o p e r a t o r , * , a c c e s s e s a n o b j e c t o f a s p e c i e d t y p e a t a n a d d r e s s . A c c e s s i n g a n

    o b j e c t b y i t s a d d r e s s i s c a l l e d i n d i r e c t a c c e s s . T h u s , * i p t r i n d i r e c t l y a c c e s s e s t h e o b j e c t t h a t

    i p t r p o i n t s t o , i . e . * i p t r a c c e s s e s x . T h e i n d i r e c t i o n o p e r a t o r i s a l s o c a l l e d t h e c o n t e n t s o f

    o p e r a t o r o r t h e d e r e f e r e n c e o p e r a t o r . A p p l y i n g t h e i n d i r e c t i o n o p e r a t o r t o a p o i n t e r v a r i a b l e

    i s r e f e r r e d t o a s d e r e f e r e n c i n g t h e p o i n t e r v a r i a b l e , i . e . * i p t r d e r e f e r e n c e s i p t r . T h e a d d r e s s o f

    o p e r a t o r , & , i s u s e d t o g e t t h e a d d r e s s o f a n o b j e c t . W e h a v e a l r e a d y u s e d i t i n c a l l s t o s c a n f ( )

    W e c a n a l s o u s e i t t o a s s i g n a v a l u e t o a p o i n t e r v a r i a b l e .

    L e t u s c o n s i d e r s o m e e x a m p l e s u s i n g t h e f o l l o w i n g d e c l a r a t i o n s :

    i n t x , z

    f l o a t y

    c h a r c h , * p c h

    i n t * p i , * p i 2

    f l o a t * p f

    W h e n t h e s e d e c l a r a t i o n s a r e e n c o u n t e r e d , m e m o r y c e l l s a r e a l l o c a t e d f o r t h e s e v a r i a b l e s a t s o m e

    a d d r e s s e s a s s h o w n i n F i g u r e 6 . 2 . V a r i a b l e s x a n d z a r e i n t t y p e s , y i s f l o a t , a n d c h i s c h a r

    P o i n t e r v a r i a b l e s p i a n d p i 2 a r e v a r i a b l e s t h a t c a n p o i n t t o i n t e g e r s , p f i s a f l o a t p o i n t e r , a n d

    p c h i s a c h a r a c t e r p o i n t e r . N o t e t h a t t h e i n i t i a l v a l u e s o f a l l v a r i a b l e s , i n c l u d i n g p o i n t e r v a r i a b l e s ,

    a r e u n k n o w n . J u s t a s w e m u s t i n i t i a l i z e i n t a n d f l o a t v a r i a b l e s , w e m u s t a l s o i n i t i a l i z e p o i n t e r

    v a r i a b l e s . H e r e a r e s o m e e x a m p l e s :

    x = 1 0 0

    y = 2 0 . 0

    z = 5 0

    p i = & x / * p i p o i n t s t o x * /

    p i 2 = & z / * p i 2 p o i n t s t o z * /

    p c h = & c h / * p c h p o i n t s t o c h * /

    T h e r e s u l t o f e x e c u t i n g t h e s e s t a t e m e n t s i s s h o w n i n F i g u r e 6 . 3 : p i p o i n t s t o t h e c e l l f o r t h e

    v a r i a b l e x , p i 2 p o i n t s t o z , p c h p o i n t s t o c h , a n d p f s t i l l c o n t a i n s g a r b a g e . R e m e m b e r , t h e v a l u e

    o f a p o i n t e r v a r i a b l e i s s t o r e d a s a n a d d r e s s i n t h e c e l l h o w e v e r , w e d o n o t n e e d t o b e c o n c e r n e d

    w i t h t h e v a l u e i t s e l f . I n s t e a d , o u r g u r e s i m p l y s h o w s w h a t t h e i n i t i a l i z e d p o i n t e r v a r i a b l e s p o i n t

  • 7/27/2019 Chapter6 - Pointer

    6/38

    2 6 0 C H A P T E R 6 . P O I N T E R S

    m a i n ( )

    i n t x i n t z o a t y c h a r c h

    i n t * p i i n t * p i 2 o a t * p f c h a r * p c h

    ? ? ? ? ? ? ? ?

    ? ? ? ?

    F i g u r e 6 . 2 : D e c l a r a t i o n o f P o i n t e r V a r i a b l e s

    m a i n ( )

    i n t x i n t z o a t y c h a r c h

    i n t * p i i n t * p i 2 o a t * p f c h a r * p c h

    ? ?

    ?

    1 0 0 5 0 2 0 . 0

    F i g u r e 6 . 3 : A s s i g n m e n t s o f p o i n t e r s

  • 7/27/2019 Chapter6 - Pointer

    7/38

    6 . 1 . W H A T I S A P O I N T E R ? 2 6 1

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    CO

    m a i n ( )

    i n t x i n t z o a t y c h a r c h

    i n t * p i i n t * p i 2 o a t * p f c h a r * p c h

    ? ?

    ?

    1 0 0 5 0 2 0 . 0

    F i g u r e 6 . 4 : E e c t o f P o i n t e r t o P o i n t e r A s s i g n m e n t | S t a t e m e n t 1 .

    t o . T h e s e i n i t i a l i z e d p o i n t e r s m a y n o w b e u s e d t o i n d i r e c t l y a c c e s s t h e o b j e c t s t h e y p o i n t t o , o r

    t h e y b e m a y b e c h a n g e d b y n e w a s s i g n m e n t s . H e r e a r e s o m e e x a m p l e s o f s t a t e m e n t s a n d h o w

    t h e y c h a n g e t h i n g s f o r t h e a b o v e m e m o r y o r g a n i z a t i o n . ( T h e s t a t e m e n t s a r e n u m b e r e d i n o r d e r

    t o r e f e r e n c e t h e m t h e n u m b e r s a r e n o t p a r t o f t h e c o d e ) .

    1 : p i 2 = p i / * p i 2 p o i n t s t o w h e r e p i p o i n t s * /

    / * i . e . p i 2 = = > x * /

    2 : p i = & z / * p i n o w p o i n t s t o z , p i 2 s t i l l p o i n t s t o x * /

    / * i . e . p i = = > z , p i 2 = = > x * /

    3 : * p i = * p i 2 / * z = x , i . e , z = 1 0 0 * /

    4 : * p i = 2 0 0 / * z = 2 0 0 , x i s u n c h a n g e d * /

    5 : * p i 2 = * p i 2 + 2 0 0 / * x = 3 0 0 , z i s u n c h a n g e d * /

    S t a t e m e n t 1 : A s s i g n s v a l u e o f p i t o p i 2 , s o p i 2 n o w a l s o p o i n t s t o x ( s e e F i g u r e 6 . 4 ) . S i n c e

    b o t h o f t h e v a r i a b l e s a r e t y p e i n t * t h i s a s s i g n m e n t i s a l l o w e d .

    S t a t e m e n t 2 : M a k e s p i p o i n t t o z ( s e e F i g u r e 6 . 5 ) . T h e e x p r e s s i o n & z e v a l u a t e s t o t h e

    a d d r e s s o f z i . e . a n i n t p o i n t e r .

    S t a t e m e n t 3 : S i n c e p i 2 p o i n t s t o x , t h e v a l u e o f t h e r i g h t h a n d s i d e , * p i 2 , d e r e f e r e n c e s

    t h e p o i n t e r a n d e v a l u a t e s t o t h e v a l u e i n t h e c e l l , i . e . 1 0 0 . T h i s v a l u e i s a s s i g n e d t o

    t h e o b j e c t a c c e s s e d b y t h e l e f t h a n d s i d e , * p i , i . e . t h e p l a c e p o i n t e d t o b y p i o r t h e

  • 7/27/2019 Chapter6 - Pointer

    8/38

    2 6 2 C H A P T E R 6 . P O I N T E R S

    7

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    CO

    m a i n ( )

    i n t x i n t z o a t y c h a r c h

    i n t * p i i n t * p i 2 o a t * p f c h a r * p c h

    ? ?

    ?

    1 0 0 5 0 2 0 . 0

    F i g u r e 6 . 5 : E e c t o f P o i n t e r R e a s s i g n m e n t | S t a t e m e n t 2 .

    o b j e c t z ( s e e F i g u r e 6 . 6 ) . T h i s h a s t h e s a m e e e c t a s t h e a s s i g n m e n t z = x . N o t e ,

    w e h a v e u s e d a d e r e f e r e n c e d p o i n t e r v a r i a b l e a s t h e L v a l u e o n t h e l e f t h a n d s i d e o f a n

    a s s i g n m e n t o p e r a t o r . T h e s e m a n t i c s i s t o a c c e s s t h e o b j e c t i n d i r e c t l y a n d s t o r e t h e

    v a l u e o f t h e e x p r e s s i o n o n t h e r i g h t h a n d s i d e .

    S t a t e m e n t 4 : T h e v a l u e , 2 0 0 , i s a s s i g n e d t o * p i , i . e . z ( s e e F i g u r e 6 . 7 ) . A g a i n , w e h a v e

    u s e d a n i n d i r e c t a c c e s s f o r t h e L v a l u e o f t h e a s s i g n m e n t .

    S t a t e m e n t 5 : T h e r i g h t h a n d s i d e e v a l u a t e s t o 3 0 0 , s i n c e 2 0 0 i s a d d e d t o * p i 2 s o 3 0 0 i s

    a s s i g n e d t o * p i 2 , i . e . x ( s e e F i g u r e 6 . 8 ) . A g a i n , w e h a v e u s e d a n i n d i r e c t a c c e s s o n

    b o t h t h e l e f t a n d r i g h t h a n d s i d e s .

    W e s e e t h a t t h e l e f t h a n d s i d e o f a n a s s i g n m e n t o p e r a t o r , t h e L v a l u e , c a n b e a r e f e r e n c e t o

    a n o b j e c t e i t h e r b y d i r e c t a c c e s s ( i . e . a v a r i a b l e n a m e ) o r b y i n d i r e c t a c c e s s ( i . e . a d e r e f e r e n c e d

    p o i n t e r v a r i a b l e ) . A l s o n o t i c e t h a t w e w e r e v e r y c a r e f u l a b o u t t h e t y p e o f t h e o b j e c t s o n t h e l e f t

    a n d r i g h t h a n d s i d e o f t h e a s s i g n m e n t o p e r a t o r s . W e h a v e a s s i g n e d a n i n t e g e r v a l u e t o a c e l l

    p o i n t e d t o b y a n i n t e g e r p o i n t e r , a n d w h e n a s s i g n i n g p o i n t e r s , w e h a v e a s s i g n e d a n i n t e g e r p o i n t e r

    t o a c e l l d e c l a r e d a s a n i n t * . A n a s s i g n m e n t s t a t e m e n t s u c h a s :

    p i = x

  • 7/27/2019 Chapter6 - Pointer

    9/38

    6 . 1 . W H A T I S A P O I N T E R ? 2 6 3

    7

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    CO

    m a i n ( )

    i n t x i n t z o a t y c h a r c h

    i n t * p i i n t * p i 2 o a t * p f c h a r * p c h

    ? ?

    ?

    1 0 0 2 0 . 0 1 0 0

    F i g u r e 6 . 6 : E e c t o f I n d i r e c t P o i n t e r A c c e s s a n d A s s i g n m e n t | S t a t e m e n t 3

    7

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    CO

    m a i n ( )

    i n t x i n t z o a t y c h a r c h

    i n t * p i i n t * p i 2 o a t * p f c h a r * p c h

    ? ?

    ?

    1 0 0 2 0 . 0 2 0 0

    F i g u r e 6 . 7 : E e c t o f I n d i r e c t A s s i g n m e n t | S t a t e m e n t 4

  • 7/27/2019 Chapter6 - Pointer

    10/38

    2 6 4 C H A P T E R 6 . P O I N T E R S

    7

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    C

    CO

    m a i n ( )

    i n t x i n t z o a t y c h a r c h

    i n t * p i i n t * p i 2 o a t * p f c h a r * p c h

    ? ?

    ?

    2 0 . 0 2 0 03 0 0

    F i g u r e 6 . 8 : E e c t o f I n d i r e c t P o i n t e r A c c e s s a n d A s s i g n m e n t | S t a t e m e n t 5

    i s a l e g a l s t a t e m e n t i n C : a s s i g n i n g a n i n t e g e r v a l u e t o a p o i n t e r c e l l . H o w e v e r , t h e e e c t m a y

    n o t b e a s w e w o u l d e x p e c t . T h e v a l u e o f x w i l l b e p l a c e d i n t h e p o i n t e r c e l l , p i , a n d s u b s e q u e n t

    d e r e f e r e n c i n g o f p i , ( * p i ) , w i l l u s e t h a t v a l u e a s a p o i n t e r ( a n a d d r e s s ) t o n d t h e c e l l t o i n d i r e c t l y

    a c c e s s . T h i s i s a l m o s t n e v e r w h a t w e i n t e n d t o d o i n t h i s s t a t e m e n t . M o s t C c o m p i l e r s w i l l g e n e r a t e

    a w a r n i n g a t c o m p i l e t i m e s t a t i n g t h a t a n i l l e g a l i n t e g e r - p o i n t e r c o m b i n a t i o n i n a n a s s i g n m e n t w a s

    e n c o u n t e r e d t o i n d i c a t e t h a t s o m e t h i n g i s p o s s i b l y w r o n g h e r e . A w a r n i n g i s n o t a n e r r o r i t d o e s

    n o t p r e v e n t t h e c o m p i l e r f r o m g e n e r a t i n g a f u n c t i o n a l o b j e c t l e . H o w e v e r , i t i s a n i n d i c a t i o n t h a t

    t h e s t a t e m e n t m a y n o t b e w h a t t h e p r o g r a m m e r i n t e n d e d . S u c h a s t a t e m e n t i s p r o b a b l y c o r r e c t l y

    w r i t t e n a s :

    * p i = x o r p i = & x

    w h i c h a s s i g n a v a l u e t o t h e c e l l p o i n t e d t o b y p i o r t o a s s i g n a n a d d r e s s t o p i i t s e l f , r e s p e c t i v e l y .

    ( I n t h e R A R E i n s t a n c e w h e r e s u c h a n a s s i g n m e n t o f a n i n t e g e r t o a p o i n t e r c e l l i s i n t e n d e d , t h e

    s y n t a x :

    p i = ( i n t * ) x

    i . e . c a s t i n g t h e i n t e g e r t o a n i n t e g e r p o i n t e r , s h o u l d b e u s e d ) .

    L i k e w i s e , a n a t t e m p t t o u s e t h e u n i n i t i a l i z e d v a r i a b l e , p f w i l l b e a d i s a s t e r . S u p p o s e w e w r i t e :

  • 7/27/2019 Chapter6 - Pointer

    11/38

    6 . 1 . W H A T I S A P O I N T E R ? 2 6 5

    p r i n t f ( " % f \ n " , * p f )

    T h e v a l u e o f p f i s g a r b a g e s o * p f w i l l a t t e m p t t o a c c e s s t h e g a r b a g e a d d r e s s f o r a f l o a t o b j e c t .

    T h e g a r b a g e v a l u e o f p f m a y b e a n i n v a l i d m e m o r y a d d r e s s , i n w h i c h c a s e , t h e p r o g r a m w i l l b e

    a b o r t e d d u e t o a m e m o r y f a u l t a r u n t i m e e r r o r . T h i s i s b a d n e w s h o w e v e r , w e m a y b e e v e n m o r e

    u n f o r t u n a t e i f t h e v a l u e i n p f i s a v a l i d m e m o r y a d d r e s s . I n t h i s c a s e , w e w o u l d a c c e s s a v a l u e

    f r o m s o m e u n k n o w n p l a c e i n m e m o r y . T h e s i t u a t i o n i s e v e n w o r s e w h e n a n u n i n i t i a l i z e d p o i n t e r

    i s u s e d i n d i r e c t l y a s a n L v a l u e :

    * p f = 3 . 5

    S i n c e w e d o n o t k n o w w h e r e p f i s p o i n t i n g , i f i t h a p p e n s t o b e a l e g a l a d d r e s s , w e h a v e j u s t

    p l a c e d t h e v a l u e , 3 . 5 , i n s o m e u n k n o w n l o c a t i o n i n m e m o r y , p o s s i b l e a c e l l b e l o n g i n g t o a v a r i a b l e

    i n a n o t h e r p a r t o f t h e p r o g r a m . F i n d i n g t h i s t y p e o f b u g i s v e r y d i c u l t . T h e l e s s o n h e r e i s

    t h a t c a r e s h o u l d b e t a k e n w h e n u s i n g p o i n t e r s , p a r t i c u l a r l y e n s u r i n g t h a t p o i n t e r s a r e p r o p e r l y

    i n i t i a l i z e d .

    O n t h e o t h e r h a n d , t h e c h a r a c t e r v a r i a b l e , c h , i s n o t i n i t i a l i z e d , b u t t h e p o i n t e r v a r i a b l e , p c h

    i s i n i t i a l i z e d t o p o i n t t o c h s o t h e e x p r e s s i o n , * p c h , w i l l a c c e s s t h e o b j e c t , c h , c o r r e c t l y . I f t h e

    v a l u e o f * p c h i s a c c e s s e d , i t w i l l b e g a r b a g e b u t a v a l u e c a n b e s t o r e d i n * p c h c o r r e c t l y .

    W i t h p r o p e r c a r e , t h e v a l u e o f a n i n i t i a l i z e d p o i n t e r v a r i a b l e ( t h e a d d r e s s o f s o m e o b j e c t ) a l l o w s

    u s t o i n d i r e c t l y a c c e s s t h e o b j e c t b y d e r e f e r e n c i n g t h e p o i n t e r v a r i a b l e . A n e x a m p l e p r o g r a m ,

    s h o w n i n F i g u r e 6 . 9 , i l l u s t r a t e s t h e v a l u e o f a p o i n t e r v a r i a b l e a n d t h e v a l u e o f t h e o b j e c t i n d i r e c t l y

    a c c e s s e d b y i t .

    F i g u r e 6 . 1 0 s h o w s p r o g r a m t r a c e g r a p h i c a l l y . T h e p r o g r a m r s t d e c l a r e s a n i n t a n d a n i n t *

    v a r i a b l e s ( F i g u r e 6 . 1 0 a ) ) . T h e r s t p r i n t f ( ) s t a t e m e n t p r i n t s t h e p r o g r a m t i t l e f o l l o w e d b y t h e

    i n i t i a l i z a t i o n o f i 1 a n d i p t r ( F i g u r e 6 . 1 0 b ) ) . T h e n e x t p r i n t f ( ) g i v e s t h e h e x a d e c i m a l v a l u e o f

    i p t r , w h i c h i s t h e a d d r e s s o f i 1 . T h e n e x t s t a t e m e n t p r i n t s t h e v a l u e o f t h e s a m e o b j e c t i n d i r e c t l y

    a c c e s s e d b y * i p t r a n d d i r e c t l y a c c e s s e d b y i 1 . T h e n , t h e v a l u e o f * i p t r i s c h a n g e d ( F i g u r e 6 . 1 0 c ) )

    a n d t h e l a s t s t a t e m e n t p r i n t s t h e c h a n g e d v a l u e o f t h e o b j e c t , a c c e s s e d r s t i n d i r e c t l y a n d t h e n

    d i r e c t l y .

    T h e o u t p u t f o r a s a m p l e r u n i s :

    P o i n t e r s : D i r e c t a n d I n d i r e c t A c c e s s

    i p t r = 6 5 4 9 0

    * i p t r = 1 0 , i 1 = 1 0

    * i p t r = 1 0 0 , i 1 = 1 0 0

  • 7/27/2019 Chapter6 - Pointer

    12/38

    2 6 6 C H A P T E R 6 . P O I N T E R S

    / * F i l e : a c c e s s . c

    T h i s p r o g r a m p r i n t s o u t t h e v a l u e s o f p o i n t e r s a n d v a l u e s o f

    d e r e f e r e n c e d p o i n t e r v a r i a b l e s .

    * /

    # i n c l u d e < s t d i o . h >

    m a i n ( )

    { i n t * i p t r , / * i n t e g e r p o i n t e r * /

    i 1

    p r i n t f ( " P o i n t e r s : D i r e c t a n d I n d i r e c t A c c e s s \ n \ n " )

    / * i n i t i a l i z a t i o n s * /

    i 1 = 1 0

    i p t r = & i 1 / * i p t r p o i n t s t o t h e o b j e c t w h o s e n a m e i s i 1 * /

    / * p r i n t v a l u e o f i p t r , i . e . , a d d r e s s o f i 1 * /

    p r i n t f ( " i p t r = % u \ n " , i p t r )

    / * p r i n t v a l u e o f t h e o b j e c t a c c e s s e d i n d i r e c t l y a n d d i r e c t l y * /

    p r i n t f ( " * i p t r = % d , i 1 = % d \ n " , * i p t r , i 1 )

    * i p t r = * i p t r * 1 0 / * v a l u e o f * i p t r c h a n g e d * /

    / * p r i n t v a l u e s o f t h e o b j e c t a g a i n * /

    p r i n t f ( " * i p t r = % d , i 1 = % d \ n " , * i p t r , i 1 )

    }

    F i g u r e 6 . 9 : E x a m p l e C o d e w i t h D i r e c t a n d I n d i r e c t A c c e s s

  • 7/27/2019 Chapter6 - Pointer

    13/38

    6 . 1 . W H A T I S A P O I N T E R ? 2 6 7

    m a i n ( )

    i n t i 1

    i n t * i p t r

    m a i n ( )

    i n t i 1

    i n t * i p t r

    m a i n ( )

    i n t i 1

    i n t * i p t r

    6 6

    a ) b ) c )

    ?

    ? ? 1 0 1 0 0

    F i g u r e 6 . 1 0 : T r a c e f o r D i r e c t a n d I n d i r e c t A c c e s s

  • 7/27/2019 Chapter6 - Pointer

    14/38

    2 6 8 C H A P T E R 6 . P O I N T E R S

    6 . 2 P a s s i n g P o i n t e r s t o F u n c t i o n s

    A s w e h a v e s e e n , i n C , a r g u m e n t s a r e p a s s e d t o f u n c t i o n s b y v a l u e i . e . o n l y t h e v a l u e s o f a r g u m e n t

    e x p r e s s i o n s a r e p a s s e d t o t h e c a l l e d f u n c t i o n . S o m e p r o g r a m m i n g l a n g u a g e s a l l o w a r g u m e n t s

    p a s s e d b y r e f e r e n c e , w h i c h a l l o w s t h e c a l l e d f u n c t i o n t o m a k e c h a n g e s i n a r g u m e n t o b j e c t s . C

    a l l o w s o n l y c a l l b y v a l u e , n o t c a l l b y r e f e r e n c e h o w e v e r , i f a c a l l e d f u n c t i o n i s t o c h a n g e t h e v a l u e

    o f a n o b j e c t d e n e d i n t h e c a l l i n g f u n c t i o n , i t c a n b e p a s s e d a v a l u e w h i c h i s a p o i n t e r t o t h e

    o b j e c t . T h e c a l l e d f u n c t i o n c a n t h e n d e r e f e r e n c e t h e p o i n t e r t o a c c e s s t h e o b j e c t i n d i r e c t l y . W e

    h a v e a l s o s e e n t h a t a C f u n c t i o n c a n r e t u r n a s i n g l e v a l u e a s t h e v a l u e o f t h e f u n c t i o n . H o w e v e r , b y

    i n d i r e c t a c c e s s , a c a l l e d f u n c t i o n c a n e e c t i v e l y \ r e t u r n " s e v e r a l v a l u e s . O n l y o n e v a l u e i s a c t u a l l y

    r e t u r n e d a s t h e v a l u e o f t h e f u n c t i o n , a l l o t h e r v a l u e s m a y b e i n d i r e c t l y s t o r e d i n o b j e c t s i n t h e

    c a l l i n g f u n c t i o n . T h i s u s e o f p o i n t e r v a r i a b l e s i s o n e o f t h e m o s t c o m m o n i n C . L e t u s l o o k a t

    s o m e s i m p l e e x a m p l e s t h a t u s e i n d i r e c t a c c e s s .

    6 . 2 . 1 I n d i r e c t l y I n c r e m e n t i n g a V a r i a b l e

    W e w i l l r s t w r i t e a p r o g r a m w h i c h u s e s a f u n c t i o n t o i n c r e m e n t t h e v a l u e o f a n o b j e c t d e n e d

    i n m a i n ( ) . A s e x p l a i n e d a b o v e , t h e c a l l e d f u n c t i o n m u s t i n d i r e c t l y a c c e s s t h e o b j e c t d e n e d i n

    m a i n ( ) , i . e . i t m u s t u s e a p o i n t e r t o a c c e s s t h e d e s i r e d o b j e c t . T h e r e f o r e , t h e c a l l i n g f u n c t i o n

    m u s t p a s s a n a r g u m e n t w h i c h i s a p o i n t e r t o t h e o b j e c t w h i c h t h e c a l l e d f u n c t i o n c a n i n d i r e c t l y

    a c c e s s .

    F i g u r e 6 . 1 1 s h o w s t h e c o d e f o r t h e p r o g r a m a n d t h e p r o g r a m t r a c e i s s h o w n g r a p h i c a l l y i n

    F i g u r e 6 . 1 2 . T h e f u n c t i o n , m a i n ( ) d e c l a r e s a s i n g l e i n t e g e r v a r i a b l e a n d i n i t i a l i z e s i t t o 7 ( s e e

    F i g u r e 6 . 1 2 a ) ) . W h e n m a i n ( ) c a l l s i n d i r e c t i n c r ( ) , i t p a s s e s t h e p o i n t e r , & x ( t h e a d d r e s s o f

    x ) . T h e f o r m a l p a r a m e t e r , p , i s d e n e d i n i n d i r e c t i n c r ( ) a s a p o i n t e r v a r i a b l e o f t y p e i n t *

    W h e n i n d i r e c t i n c r ( ) i s c a l l e d , t h e v a r i a b l e , p g e t s t h e v a l u e o f a p o i n t e r t h e t h e c e l l n a m e d

    x i n m a i n ( ) ( s e e F i g u r e 6 . 1 2 b ) ) . T h e f u n c t i o n , i n d i r e c t i n c r ( ) , i n d i r e c t l y a c c e s s e s t h e o b j e c t

    p o i n t e d t o b y p , i . e . t h e i n t o b j e c t , x , d e n e d i n m a i n ( ) . T h e a s s i g n m e n t s t a t e m e n t i n d i r e c t l y

    a c c e s s e s t h e v a l u e , 7 , i n t h i s c e l l , a n d i n c r e m e n t s i t t o 8 , s t o r i n g i t i n d i r e c t l y i n t h e c e l l , x , i n

    m a i n ( ) ( s e e F i g u r e 6 . 1 2 c ) ) .

    S a m p l e S e s s i o n :

    * * * I n d i r e c t A c c e s s * * *

    O r i g i n a l v a l u e o f x i s 7

    T h e v a l u e o f x i s 8

    6 . 2 . 2 C o m p u t i n g t h e S q u a r e a n d C u b e

    S o m e t i m e s , w h e t h e r a v a l u e s h o u l d b e r e t u r n e d a s t h e v a l u e o f a c a l l e d f u n c t i o n o r i n d i r e c t l y s t o r e d

    i n a n o b j e c t i s a m a t t e r o f c h o i c e . F o r e x a m p l e , c o n s i d e r a f u n c t i o n w h i c h i s r e q u i r e d t o \ r e t u r n "

  • 7/27/2019 Chapter6 - Pointer

    15/38

    6 . 2 . P A S S I N G P O I N T E R S T O F U N C T I O N S 2 6 9

    / * F i l e : i n d i n c r . c

    P r o g r a m i l l u s t r a t e s i n d i r e c t a c c e s s

    t o x b y a f u n c t i o n i n d i r e c t _ i n c r ( ) .

    F u n c t i o n i n c r e m e n t s x b y 1 .

    * /

    # i n c l u d e < s t d i o . h >

    v o i d i n d i r e c t _ i n c r ( i n t * p )

    m a i n ( )

    { i n t x

    p r i n t f ( " * * * I n d i r e c t A c c e s s * * * \ n " )

    x = 7

    p r i n t f ( " O r i g i n a l v a l u e o f x i s % d \ n " , x )

    i n d i r e c t _ i n c r ( & x )

    p r i n t f ( " T h e v a l u e o f x i s % d \ n " , x )

    }

    / * F u n c t i o n i n d i r e c t l y a c c e s s e s o b j e c t i n c a l l i n g f u n c t i o n . * /

    v o i d i n d i r e c t _ i n c r ( i n t * p )

    {

    * p = * p + 1

    }

    F i g u r e 6 . 1 1 : C o d e f o r I n d i r e c t A c c e s s b y a F u n c t i o n

  • 7/27/2019 Chapter6 - Pointer

    16/38

    2 7 0 C H A P T E R 6 . P O I N T E R S

    i n t x

    7

    m a i n ( )

    i n t x

    7

    m a i n ( )

    i n t * )

    p

    i n t *

    S

    S

    S

    S

    S

    S

    S

    So

    S

    S

    S

    S

    S

    S

    S

    So

    a ) b ) c )

    i n t x

    m a i n ( )

    8

    i n d i r e c t i n c r ( i n d i r e c t i n c r (

    F i g u r e 6 . 1 2 : T r a c e f o r I n d i r e c t A c c e s s b y a F u n c t i o n

  • 7/27/2019 Chapter6 - Pointer

    17/38

    6 . 2 . P A S S I N G P O I N T E R S T O F U N C T I O N S 2 7 1

    / * F i l e : s q c u b e . c

    P r o g r a m u s e s a f u n c t i o n t h a t r e t u r n s a s q u a r e o f i t s a r g u m e n t a n d

    i n d i r e c t l y s t o r e s t h e c u b e .

    * /

    # i n c l u d e < s t d i o . h >

    d o u b l e s q c u b e ( d o u b l e x , d o u b l e * p c u b e )

    m a i n ( )

    { d o u b l e x , s q u a r e , c u b e

    p r i n t f ( " * * * D i r e c t l y a n d I n d i r e c t l y R e t u r n e d V a l u e s * * * \ n " )

    x = 3

    s q u a r e = s q c u b e ( x , & c u b e )

    p r i n t f ( " x = % f , s q u a r e = % f , c u b e = % f \ n " ,

    x , s q u a r e , c u b e )

    }

    / * F u n c t i o n r e t u r n s q u a r e o f x , a n d i n d i r e c t l y s t o r e s c u b e o f x * /

    d o u b l e s q c u b e ( d o u b l e x , d o u b l e * p c u b e )

    {

    * p c u b e = x * x * x

    r e t u r n ( x * x )

    }

    F i g u r e 6 . 1 3 : C o d e f o r I n d i r e c t l y R e t u r n e d V a l u e s

    t w o v a l u e s t o t h e c a l l i n g f u n c t i o n . W e k n o w t h a t o n l y o n e v a l u e c a n b e r e t u r n e d a s t h e v a l u e o f

    t h e f u n c t i o n , s o w e c a n d e c i d e t o w r i t e t h e f u n c t i o n w i t h o n e o f t h e t w o v a l u e s f o r m a l l y r e t u r n e d

    b y a r e t u r n s t a t e m e n t , a n d t h e o t h e r v a l u e s t o r e d , b y i n d i r e c t a c c e s s , i n a n o b j e c t d e n e d i n t h e

    c a l l i n g f u n c t i o n . T h e t w o v a l u e s a r e \ r e t u r n e d " t o t h e c a l l i n g f u n c t i o n , o n e f o r m a l l y a n d o n e b y

    i n d i r e c t i o n .

    L e t u s w r i t e a f u n c t i o n t o r e t u r n t h e s q u a r e a n d t h e c u b e o f a v a l u e . W e d e c i d e t h a t t h e

    f u n c t i o n r e t u r n s t h e s q u a r e a s i t s v a l u e , a n d \ r e t u r n s " t h e c u b e b y i n d i r e c t i o n . W e n e e d t w o

    p a r a m e t e r s o n e t o p a s s t h e v a l u e t o b e s q u a r e d a n d c u b e d t o t h e f u n c t i o n , a n d o n e p o i n t e r t y p e

    p a r a m e t e r w h i c h w i l l b e u s e d t o i n d i r e c t l y a c c e s s a n a p p r o p r i a t e o b j e c t i n t h e c a l l i n g f u n c t i o n t o

    s t o r e t h e c u b e o f t h e v a l u e . W e a s s u m e a l l o b j e c t s a r e o f t y p e d o u b l e

    T h e c o d e i s s h o w n i n F i g u r e 6 . 1 3 . T h e p r o t o t y p e f o r s q c u b e ( ) i s d e n e d t o h a v e t w o p a r a m -

    e t e r s , a d o u b l e a n d a p o i n t e r t o d o u b l e , a n d i t r e t u r n s a d o u b l e v a l u e . T h e p r i n t f ( ) p r i n t s t h e

    v a l u e o f x t h e v a l u e o f s q u a r e w h i c h i s t h e v a l u e r e t u r n e d b y s q c u b e ( ) ( t h e s q u a r e o f x ) a n d ,

    t h e v a l u e o f c u b e ( t h e c u b e o f x ) w h i c h i s i n d i r e c t l y s t o r e d b y s q c u b e ( )

  • 7/27/2019 Chapter6 - Pointer

    18/38

    2 7 2 C H A P T E R 6 . P O I N T E R S

    ?

    m a i n ( )

    d o u b l e x d o u b l e s q u a r e d o u b l e c u b e

    ? ?? ?3 0

    s q c u b e ( d o u b l e d o u b l e * )

    d o u b l e

    p c u b e x

    F i g u r e 6 . 1 4 : T r a c e f o r s q c u b e | S t e p 1

  • 7/27/2019 Chapter6 - Pointer

    19/38

    6 . 2 . P A S S I N G P O I N T E R S T O F U N C T I O N S 2 7 3

    ?

    B

    B

    B

    B

    B

    B

    B

    B

    B

    B

    BM

    m a i n ( )

    d o u b l e x d o u b l e s q u a r e d o u b l e c u b e

    ? ?? ?3 0

    s q c u b e ( d o u b l e d o u b l e * )

    d o u b l e

    p c u b e x

    3 0

    F i g u r e 6 . 1 5 : T r a c e f o r s q c u b e | S t e p 2

  • 7/27/2019 Chapter6 - Pointer

    20/38

    2 7 4 C H A P T E R 6 . P O I N T E R S

    ?

    B

    B

    B

    B

    B

    B

    B

    B

    B

    B

    BM

    m a i n ( )

    d o u b l e x d o u b l e s q u a r e d o u b l e c u b e

    ? ?3 0

    s q c u b e ( d o u b l e d o u b l e * )

    d o u b l e

    p c u b e x

    3 0

    2 7 . 0

    F i g u r e 6 . 1 6 : T r a c e f o r s q c u b e | S t e p 3

  • 7/27/2019 Chapter6 - Pointer

    21/38

    6 . 2 . P A S S I N G P O I N T E R S T O F U N C T I O N S 2 7 5

    B

    B

    B

    B

    B

    B

    B

    B

    B

    B

    BM

    6

    m a i n ( )

    d o u b l e x d o u b l e s q u a r e d o u b l e c u b e

    3 0

    s q c u b e ( d o u b l e d o u b l e * )

    d o u b l e

    p c u b e x

    3 0

    2 7 . 0 9 0

    F i g u r e 6 . 1 7 : T r a c e f o r s q c u b e | S t e p 4

  • 7/27/2019 Chapter6 - Pointer

    22/38

    2 7 6 C H A P T E R 6 . P O I N T E R S

    F i g u r e s 6 . 1 4 | 6 . 1 7 s h o w a s t e p - b y - s t e p t r a c e o f t h e c h a n g e s i n o b j e c t s , b o t h i n t h e c a l l i n g

    f u n c t i o n a n d i n t h e c a l l e d f u n c t i o n . I n t h e r s t s t e p ( F i g u r e 6 . 1 4 ) , t h e d e c l a r a t i o n s f o r t h e f u n c t i o n ,

    m a i n ( ) a n d t h e t e m p l a t e f o r t h e f u n c t i o n , s q c u b e ( ) a r e s h o w n w i t h t h e i n i t i a l i z a t i o n o f t h e

    v a r i a b l e , x , i n m a i n ( ) . I n t h e s e c o n d s t e p ( F i g u r e 6 . 1 5 ) , t h e f u n c t i o n , s q c u b e ( ) i s c a l l e d f r o m

    m a i n ( ) p a s s i n g t h e v a l u e o f x ( 3 . 0 ) t o t h e r s t p a r a m e t e r , ( c a l l e d x i n s q c u b e ( ) ) , a n d t h e v a l u e o f

    & c u b e , n a m e l y a p o i n t e r t o c u b e , a s t h e s e c o n d a r g u m e n t t o t h e p a r a m e t e r , p c u b e . I n t h e t h i r d

    s t e p ( F i g u r e 6 . 1 6 ) , t h e r s t s t a t e m e n t i n s q c u b e ( ) h a s b e e n e x e c u t e d , c o m p u t i n g t h e c u b e o f t h e

    l o c a l v a r i a b l e , x , a n d s t o r i n g t h e v a l u e i n d i r e c t l y i n t h e c e l l p o i n t e d t o b y p c u b e . F i n a l l y , F i g u r e

    6 . 1 7 s h o w s t h e s i t u a t i o n j u s t a s s q c u b e ( ) i s r e t u r n i n g , c o m p u t i n g t h e s q u a r e o f x a n d r e t u r n i n g

    t h e v a l u e w h i c h i s a s s i g n e d t o t h e v a r i a b l e , s q u a r e , b y t h e a s s i g n m e n t i n m a i n ( )

    W h i l e o n l y o n e v a l u e c a n b e r e t u r n e d a s t h e v a l u e o f a f u n c t i o n , w e l o o s e l y s a y t h a t t h i s

    f u n c t i o n \ r e t u r n s " t w o v a l u e s : t h e s q u a r e a n d t h e c u b e o f x . T h e d i s t i n c t i o n b e t w e e n a f o r m a l l y

    r e t u r n e d v a l u e a n d a n i n d i r e c t l y o r l o o s e l y \ r e t u r n e d " v a l u e w i l l b e c l e a r f r o m t h e c o n t e x t .

    S a m p l e S e s s i o n :

    * * * D i r e c t l y a n d I n d i r e c t l y R e t u r n e d V a l u e s * * *

    x = 3 . 0 0 0 0 0 0 , s q u a r e = 9 . 0 0 0 0 0 0 , c u b e = 2 7 . 0 0 0 0 0 0

    6 . 2 . 3 A f u n c t i o n t o S w a p V a l u e s

    W e h a v e a l r e a d y s e e n h o w v a l u e s o f t w o o b j e c t s c a n b e s w a p p e d d i r e c t l y i n t h e c o d e i n m a i n ( )

    W e n o w w r i t e a f u n c t i o n , s w a p ( ) , t h a t s w a p s v a l u e s o f t w o o b j e c t s d e n e d i n m a i n ( ) ( o r a n y

    o t h e r f u n c t i o n ) b y a c c e s s i n g t h e m i n d i r e c t l y , i . e . t h r o u g h p o i n t e r s . T h e f u n c t i o n m a i n ( ) c a l l s t h e

    f u n c t i o n , s w a p ( ) , p a s s i n g p o i n t e r s t o t h e t w o v a r i a b l e s . T h e c o d e i s s h o w n i n F i g u r e 6 . 1 8 . ( W e

    a s s u m e i n t e g e r t y p e o b j e c t s i n m a i n ( ) )

    T h e f u n c t i o n , s w a p ( ) , h a s t w o f o r m a l p a r a m e t e r s , i n t e g e r p o i n t e r s , p t r 1 a n d p t r 2 . A t e m p o -

    r a r y v a r i a b l e i s n e e d e d i n t h e f u n c t i o n b o d y t o s a v e t h e v a l u e o f o n e o f t h e o b j e c t s . T h e o b j e c t s

    a r e a c c e s s e d i n d i r e c t l y a n d s w a p p e d . F i g u r e s 6 . 1 9 | 6 . 2 2 s h o w t h e p r o c e s s o f f u n c t i o n c a l l , p a s s e d

    v a l u e s , a n d s t e p s i n t h e s w a p .

    S a m p l e S e s s i o n :

    O r i g i n a l v a l u e s : d a t 1 = 1 0 0 , d a t 2 = 2 0 0

    S w a p p e d v a l u e s : d a t 1 = 2 0 0 , d a t 2 = 1 0 0

    6 . 3 R e t u r n i n g t o t h e P a y r o l l T a s k w i t h P o i n t e r s

    W e w i l l n o w m o d i f y o u r p a y c a l c u l a t i o n p r o g r a m s o t h a t t h e d r i v e r c a l l s u p o n o t h e r f u n c t i o n s t o

    p e r f o r m a l l s u b t a s k s . T h e d r i v e r , m a i n ( ) , r e p r e s e n t s o n l y t h e o v e r a l l l o g i c o f t h e p r o g r a m t h e

  • 7/27/2019 Chapter6 - Pointer

    23/38

    6 . 3 . R E T U R N I N G T O T H E P A Y R O L L T A S K W I T H P O I N T E R S 2 7 7

    / * F i l e : s w a p f n c . c

    P r o g r a m u s e s a f u n c t i o n t o s w a p v a l u e s o f t w o o b j e c t s .

    * /

    # i n c l u d e < s t d i o . h >

    / * a r g u m e n t s o f s w a p ( ) a r e i n t e g e r p o i n t e r s * /

    v o i d s w a p ( i n t * p 1 , i n t * p 2 )

    m a i n ( )

    { i n t d a t 1 = 1 0 0 , d a t 2 = 2 0 0

    p r i n t f ( " O r i g i n a l v a l u e s : d a t 1 = % d , d a t 2 = % d \ n " , d a t 1 , d a t 2 )

    s w a p ( & d a t 1 , & d a t 2 )

    p r i n t f ( " S w a p p e d v a l u e s : d a t 1 = % d , d a t 2 = % d \ n " , d a t 1 , d a t 2 )

    }

    / * F u n c t i o n s w a p s v a l u e s o f o b j e c t s p o i n t e d t o b y p t r 1 a n d p t r 2 * /

    v o i d s w a p ( i n t * p t r 1 , i n t * p t r 2 )

    { i n t t e m p

    t e m p = * p t r 1

    * p t r 1 = * p t r 2

    * p t r 2 = t e m p

    }

    F i g u r e 6 . 1 8 : C o d e f o r a F u n c t i o n , s w a p ( )

  • 7/27/2019 Chapter6 - Pointer

    24/38

    2 7 8 C H A P T E R 6 . P O I N T E R S

    i n t d a t 2

    2 0 0

    i n t d a t 1

    1 0 0

    6 6

    m a i n ( )

    s w a p ( i n t * i n t * )

    p t r 1 p t r 2

    i n t t e m p

    ? ?

    F i g u r e 6 . 1 9 : T r a c e f o r s w a p ( ) | S t e p 1

  • 7/27/2019 Chapter6 - Pointer

    25/38

    6 . 3 . R E T U R N I N G T O T H E P A Y R O L L T A S K W I T H P O I N T E R S 2 7 9

    i n t d a t 2

    2 0 0

    i n t d a t 1

    1 0 0

    6 6

    m a i n ( )

    s w a p ( i n t * i n t * )

    p t r 1 p t r 2

    i n t t e m p

    1 0 0

    F i g u r e 6 . 2 0 : T r a c e f o r s w a p ( ) | S t e p 2

  • 7/27/2019 Chapter6 - Pointer

    26/38

    2 8 0 C H A P T E R 6 . P O I N T E R S

    6 6

    m a i n ( )

    s w a p ( i n t * i n t * )

    p t r 1 p t r 2

    i n t t e m p

    1 0 0

    i n t d a t 1 i n t d a t 2

    2 0 02 0 0

    F i g u r e 6 . 2 1 : T r a c e f o r s w a p ( ) | S t e p 3

  • 7/27/2019 Chapter6 - Pointer

    27/38

    6 . 3 . R E T U R N I N G T O T H E P A Y R O L L T A S K W I T H P O I N T E R S 2 8 1

    6 6

    m a i n ( )

    s w a p ( i n t * i n t * )

    p t r 1 p t r 2

    i n t t e m p

    1 0 0

    i n t d a t 1 i n t d a t 2

    2 0 0 1 0 0

    F i g u r e 6 . 2 2 : T r a c e f o r s w a p ( ) | S t e p 4

  • 7/27/2019 Chapter6 - Pointer

    28/38

    2 8 2 C H A P T E R 6 . P O I N T E R S

    d e t a i l s a r e h i d d e n i n t h e f u n c t i o n s t h a t p e r f o r m t h e v a r i o u s s u b t a s k s . T h e a l g o r i t h m f o r t h e d r i v e r

    i s :

    g e t d a t a

    r e p e a t t h e f o l l o w i n g w h i l e t h e r e i s m o r e d a t a

    c a l c u l a t e p a y

    p r i n t d a t a a n d r e s u l t s

    g e t d a t a

    F o r e a c h s t e p o f t h e a l g o r i t h m , w e w i l l u s e f u n c t i o n s t o d o t h e t a s k s o f g e t t i n g d a t a , p r i n t i n g

    d a t a a n d r e s u l t s , a n d c a l c u l a t i n g p a y . W e h a v e a l r e a d y w r i t t e n f u n c t i o n s i n C h a p t e r s 3 a n d 4 t o

    c a l c u l a t e p a y a n d t o p r i n t d a t a a n d r e s u l t s , a n d w i l l r e p e a t t h e m h e r e f o r e a s y r e f e r e n c e , m a k i n g

    s o m e m o d i c a t i o n s a n d i m p r o v e m e n t s . W e h a v e p o s t p o n e d u n t i l n o w w r i t i n g a f u n c t i o n t o r e a d

    d a t a a s s u c h a f u n c t i o n w o u l d r e q u i r e r e t u r n i n g m o r e t h a n o n e v a l u e . B y u s i n g p o i n t e r s , w e n o w

    h a v e t h e t o o l a t o u r d i s p o s a l t o i m p l e m e n t s u c h a f u n c t i o n .

    B e f o r e w e w r i t e t h e s e f u n c t i o n s , w e s h o u l d d e s i g n t h e m b y d e s c r i b i n g w h a t t h e f u n c t i o n s d o

    a n d s p e c i f y i n g t h e i n t e r f a c e t o t h e s e f u n c t i o n s i . e . b y i n d i c a t i n g t h e a r g u m e n t s a n d t h e i r t y p e s

    t o b e p a s s e d t o t h e f u n c t i o n s ( t h e i n f o r m a t i o n g i v e n t o t h e f u n c t i o n s ) a n d t h e m e a n i n g a n d t y p e

    o f t h e r e t u r n v a l u e s ( t h e i n f o r m a t i o n r e t u r n e d f r o m t h e f u n c t i o n ) . H e r e a r e o u r c h o i c e s :

    g e t d a t a ( ) : T h i s f u n c t i o n r e a d s t h e i d n u m b e r , h o u r s w o r k e d , a n d r a t e o f p a y f o r o n e e m p l o y e e

    a n d s t o r e s t h e i r v a l u e s i n d i r e c t l y u s i n g p o i n t e r s . S i n c e t h e s e v a l u e s a r e r e t u r n e d i n d i r e c t l y ,

    t h e a r g u m e n t s m u s t b e p o i n t e r s t o a p p r o p r i a t e o b j e c t s i n t h e c a l l i n g f u n c t i o n ( m a i n ( ) i n

    o u r c a s e ) . T h e f u n c t i o n r e t u r n s T r u e , i f i t f o u n d n e w d a t a i n t h e i n p u t i t r e t u r n s F a l s e

    o t h e r w i s e . H e r e i s t h e p r o t o t y p e :

    i n t g e t _ d a t a ( i n t * p i d , f l o a t * p h r s , f l o a t * p r a t e )

    W e u s e n a m e s p i d , p h r s , a n d p r a t e , t o i n d i c a t e t h a t t h e y a r e p o i n t e r s t o c e l l s f o r t h e i d ,

    h o u r s a n d r a t e , r e s p e c t i v e l y . I t i s a g o o d h a b i t t o d i s t i n g u i s h b e t w e e n o b j e c t n a m e s a n d

    p o i n t e r n a m e s w h e n e v e r t h e r e i s a p o s s i b i l i t y o f c o n f u s i o n .

    p r i n t d a t a ( ) : T h i s f u n c t i o n w r i t e s t h e i d n u m b e r , h o u r s w o r k e d , a n d r a t e o f p a y p a s s e d t o i t . I t

    h a s n o u s e f u l i n f o r m a t i o n t o r e t u r n s o r e t u r n s a v o i d t y p e . H e r e i s t h e p r o t o t y p e :

    v o i d p r i n t _ d a t a ( i n t i d , f l o a t h r s , f l o a t r a t e , f l o a t p a y )

    p r i n t p a y ( ) : T h i s f u n c t i o n i s g i v e n v a l u e s f o r t h e r e g u l a r p a y , o v e r t i m e p a y , a n d t o t a l p a y a n d

    w r i t e s t h e m t o t h e o u t p u t . I t a l s o r e t u r n s a v o i d t y p e .

    v o i d p r i n t _ p a y ( f l o a t r e g u l a r , f l o a t o v e r t i m e , f l o a t t o t a l )

    c a l c p a y ( ) : G i v e n t h e n e c e s s a r y i n f o r m a t i o n ( h o u r s a n d r a t e ) , t h i s f u n c t i o n c a l c u l a t e s a n d r e t u r n s

    t h e t o t a l p a y , a n d i n d i r e c t l y r e t u r n s t h e r e g u l a r a n d o v e r t i m e p a y . I n a d d i t i o n t o t h e v a l u e s

    o f h o u r s w o r k e d a n d r a t e o f p a y , p o i n t e r s t o r e g u l a r p a y a n d o v e r t i m e p a y a r e p a s s e d t o t h e

    f u n c t i o n . T h e p r o t o t y p e i s :

  • 7/27/2019 Chapter6 - Pointer

    29/38

    6 . 3 . R E T U R N I N G T O T H E P A Y R O L L T A S K W I T H P O I N T E R S 2 8 3

    / * F i l e : p a y u t i l . h * /

    # d e f i n e R E G _ L I M I T 4 0

    # d e f i n e O T _ F A C T O R 1 . 5

    i n t g e t _ d a t a ( i n t * p i d , f l o a t * p h r s , f l o a t * p r a t e )

    v o i d p r i n t _ d a t a ( i n t i d , f l o a t h r s , f l o a t r a t e )

    v o i d p r i n t _ p a y ( f l o a t r e g u l a r , f l o a t o v e r t i m e , f l o a t t o t a l )

    f l o a t c a l c _ p a y ( f l o a t h o u r s , f l o a t r a t e , f l o a t * p r e g u l a r ,

    f l o a t * p o v e r t i m e )

    F i g u r e 6 . 2 3 : H e a d e r l e p a y u t i l . h

    f l o a t c a l c _ p a y ( f l o a t h o u r s , f l o a t r a t e , f l o a t * p r e g u l a r ,

    f l o a t * p o v e r t i m e )

    H e r e , p r e g u l a r a n d p o v e r t i m e a r e p o i n t e r s t o c e l l s f o r r e g u l a r a n d o v e r t i m e p a y o b j e c t s i n

    t h e c a l l i n g f u n c t i o n .

    A l l o f t h e s e f u n c t i o n s w i l l b e d e n e d i n a l e , p a y u t i l . c a n d t h e i r p r o t o t y p e s a r e i n c l u d e d i n

    p a y u t i l . h . F i g u r e 6 . 2 3 s h o w s t h e h e a d e r l e . W e h a v e a l s o i n c l u d e d t h e d e n i t i o n s f o r s y m b o l i c

    c o n s t a n t s R E G L I M I T a n d O T F A C T O R i n t h e h e a d e r l e . T h i s h e a d e r l e w i l l b e i n c l u d e d i n a l l

    r e l e v a n t s o u r c e l e s .

    W i t h t h e i n f o r m a t i o n i n t h i s l e ( a n d t h e p r e c e d i n g d i s c u s s i o n o f t h e f u n c t i o n ) w e h a v e s u c i e n t

    i n f o r m a t i o n t o w r i t e t h e d r i v e r f o r t h e p r o g r a m u s i n g t h e f u n c t i o n s p r i o r t o w r i t i n g t h e a c t u a l

    c o d e f o r t h e m . F i g u r e 6 . 2 4 s h o w s t h e d r i v e r . I t a l s o i n c l u d e s t h e l e , t f d e f . h w h i c h d e n e s t h e

    m a c r o s , T R U E a n d F A L S E

    T h e l o g i c o f t h e d r i v e r i s a s f o l l o w s . A f t e r t h e p r o g r a m t i t l e i s p r i n t e d , t h e r s t s t a t e m e n t c a l l s

    g e t d a t a ( ) t o g e t t h e i d n u m b e r , h o u r s w o r k e d , a n d r a t e o f p a y . A s i n d i c a t e d i n t h e p r o t o t y p e ,

    p o i n t e r s t o t h e s e o b j e c t s a r e p a s s e d a s a r g u m e n t s s o t h a t g e t d a t a ( ) c a n i n d i r e c t l y a c c e s s t h e m

    a n d s t o r e v a l u e s . T h e f u n c t i o n , g e t d a t a ( ) , r e t u r n s T r u e o r F a l s e d e p e n d i n g o n w h e t h e r t h e r e

    i s n e w d a t a . T h e T r u e / F a l s e v a l u e i s a s s i g n e d t o t h e v a r i a b l e , m o r e d a t a . T h e w h i l e l o o p i s

    e x e c u t e d a s l o n g a s t h e r e i s m o r e d a t a i . e . m o r e d a t a i s T r u e . T h e l o o p b o d y c a l l s o n c a l c p a y ( )

    t o c a l c u l a t e t h e p a y , p r i n t d a t a ( ) t o p r i n t t h e i n p u t d a t a , p r i n t p a y ( ) t o p r i n t t h e r e s u l t s , a n d

    g e t d a t a ( ) a g a i n t o g e t m o r e d a t a . S i n c e c a l c p a y ( ) r e t u r n s t h e v a l u e s o f o v e r t i m e a n d t o t a l

    p a y i n d i r e c t l y , m a i n ( ) p a s s e s p o i n t e r s t o o b j e c t s w h i c h w i l l h o l d t h e s e v a l u e s .

    T h e o v e r a l l l o g i c i n t h e d r i v e r i s e a s y t o r e a d a n d u n d e r s t a n d a t t h i s t o p l e v e l o f l o g i c ,

    t h e d e t a i l s o f t h e c o m p u t a t i o n s a r e n o t i m p o r t a n t a n d w o u l d o n l y c o m p l i c a t e u n d e r s t a n d i n g t h e

    p r o g r a m . T h e d r i v e r w i l l r e m a i n t h e s a m e n o m a t t e r h o w t h e v a r i o u s f u n c t i o n s a r e d e n e d . T h e

    a c t u a l d e t a i l s i n o n e o r m o r e f u n c t i o n s m a y b e c h a n g e d a t a l a t e r t i m e w i t h o u t d i s t u r b i n g t h e

    d r i v e r o r t h e o t h e r f u n c t i o n s . T h i s p r o g r a m i s i m p l e m e n t e d i n f u n c t i o n a l m o d u l e s . S u c h a m o d u l a r

    p r o g r a m m i n g s t y l e m a k e s p r o g r a m d e v e l o p m e n t , d e b u g g i n g a n d m a i n t e n a n c e m u c h e a s i e r .

  • 7/27/2019 Chapter6 - Pointer

    30/38

    2 8 4 C H A P T E R 6 . P O I N T E R S

    / * F i l e : p a y 6 . c

    O t h e r F i l e s : p a y u t i l . c

    H e a d e r F i l e s t f d e f . h , p a y u t i l . h

    T h e p r o g r a m g e t s p a y r o l l d a t a , c a l c u l a t e s p a y , a n d p r i n t s o u t

    t h e r e s u l t s f o r a n u m b e r o f p e o p l e . M o d u l a r f u n c t i o n s a r e u s e d

    t o g e t d a t a , c a l c u l a t e t o t a l p a y , p r i n t d a t a , a n d p r i n t r e s u l t s .

    * /

    # i n c l u d e < s t d i o . h >

    # i n c l u d e " t f d e f . h "

    # i n c l u d e " p a y u t i l . h "

    m a i n ( )

    {

    / * d e c l a r a t i o n s * /

    i n t i d _ n u m b e r , m o r e d a t a

    f l o a t h o u r s _ w o r k e d , r a t e _ o f _ p a y , r e g u l a r _ p a y , o v e r t i m e _ p a y , t o t a l _ p a y

    / * p r i n t t i t l e * /

    p r i n t f ( " * * * P a y C a l c u l a t i o n * * * \ n \ n " )

    / * g e t d a t a a n d i n i t i a l i z e l o o p v a r i a b l e * /

    m o r e d a t a = g e t _ d a t a ( & i d _ n u m b e r , & h o u r s _ w o r k e d ,

    & r a t e _ o f _ p a y )

    / * p r o c e s s w h i l e m o r e d a t a * /

    w h i l e ( m o r e d a t a ) {

    t o t a l _ p a y = c a l c _ p a y ( h o u r s _ w o r k e d , r a t e _ o f _ p a y , & r e g u l a r _ p a y ,

    & o v e r t i m e _ p a y )

    p r i n t _ d a t a ( i d _ n u m b e r , h o u r s _ w o r k e d , r a t e _ o f _ p a y )

    p r i n t _ p a y ( r e g u l a r _ p a y , o v e r t i m e _ p a y , t o t a l _ p a y )

    m o r e d a t a = g e t _ d a t a ( & i d _ n u m b e r , & h o u r s _ w o r k e d ,

    & r a t e _ o f _ p a y )

    }

    }

    F i g u r e 6 . 2 4 : C o d e f o r t h e D r i v e r f o r p a y 6 . c

  • 7/27/2019 Chapter6 - Pointer

    31/38

    6 . 3 . R E T U R N I N G T O T H E P A Y R O L L T A S K W I T H P O I N T E R S 2 8 5

    / * F i l e : p a y u t i l . c * /

    # i n c l u d e < s t d i o . h >

    # i n c l u d e " t f d e f . h "

    # i n c l u d e " p a y u t i l . h "

    / * F u n c t i o n p r i n t s o u t t h e i n p u t d a t a * /

    v o i d p r i n t _ d a t a ( i n t i d , f l o a t h o u r s , f l o a t r a t e )

    {

    p r i n t f ( " \ n I D N u m b e r = % d \ n " , i d )

    p r i n t f ( " H o u r s W o r k e d = % f , R a t e o f P a y = % f \ n " ,

    h o u r s , r a t e )

    }

    / * F u n c t i o n p r i n t s p a y d a t a * /

    v o i d p r i n t _ p a y ( f l o a t r e g u l a r , f l o a t o v e r t i m e , f l o a t p a y )

    {

    p r i n t f ( " R e g u l a r P a y = % f , O v e r t i m e P a y = % f \ n " ,

    r e g u l a r , o v e r t i m e )

    p r i n t f ( " T o t a l P a y = % f \ n " , p a y )

    }

    F i g u r e 6 . 2 5 : C o d e f o r p r i n t d a t a ( ) a n d p r i n t p a y ( )

    O f c o u r s e , w e s t i l l h a v e t o w r i t e t h e v a r i o u s f u n c t i o n s u s e d i n t h e a b o v e d r i v e r . W e w r i t e e a c h

    o f t h e s e f u n c t i o n s i n t u r n . F i g u r e 6 . 2 5 s h o w s t h e c o d e f o r p r i n t d a t a ( ) a n d p r i n t p a y ( ) i n t h e

    l e p a y u t i l . c w h i c h a r e s i m p l e e n o u g h .

    T h e n e x t t w o f u n c t i o n s r e q u i r e i n d i r e c t a c c e s s . T h e f u n c t i o n , c a l c p a y ( ) , m u s t i n d i r e c t l y

    s t o r e t h e r e g u l a r a n d o v e r t i m e p a y s o t h e f o r m a l p a r a m e t e r s i n c l u d e t w o p o i n t e r s : p r e g ( p o i n t i n g

    t o t h e c e l l f o r r e g u l a r p a y ) a n d p o v e r ( p o i n t i n g t o t h e c e l l f o r o v e r t i m e p a y ) . T h e f u n c t i o n r e t u r n s

    t h e v a l u e o f t h e t o t a l p a y . I t i s s h o w n i n F i g u r e 6 . 2 6 . F i n a l l y , g e t d a t a ( ) m u s t i n d i r e c t l y s t o r e t h e

    v a l u e s o f t h e i d n u m b e r , h o u r s w o r k e d , a n d r a t e o f p a y , a n d r e t u r n T r u e i f i d n u m b e r i s p o s i t i v e ,

    a n d F a l s e o t h e r w i s e . F i g u r e 6 . 2 7 s h o w s t h e c o d e . T h e f o r m a l p a r a m e t e r s p i d , p h r s , a n d p r a t e

    a r e p o i n t e r s t o o b j e c t s i n t h e c a l l i n g f u n c t i o n ( m a i n ( ) i n o u r c a s e ) . R e c a l l , w h e n s c a n f ( ) i s c a l l e d

    t o r e a d d a t a , i t r e q u i r e s a r g u m e n t s t h a t a r e p o i n t e r s t o t h e o b j e c t s w h e r e t h e d a t a i s t o b e p l a c e d

    s o t h a t i t c a n i n d i r e c t l y s t o r e t h e v a l u e s . T h e r e f o r e , w h e n g e t d a t a ( ) c a l l s s c a n f ( ) , i t m u s t

    p a s s p o i n t e r s t o r e l e v a n t o b j e c t s a s a r g u m e n t s , i . e . i t p a s s e s t h e p o i n t e r s , p i d , p h r s , a n d p r a t e

    T h e s e p o i n t e r v a r i a b l e s p o i n t t o t h e o b j e c t s w h e r e v a l u e s a r e t o b e s t o r e d . W e d o N O T w a n t t o

    p a s s & p i d , & p h r s , & p r a t e a s t h e s e a r e t h e a d d r e s s e s o f t h e p o i n t e r s , p i d , p h r s , a n d p r a t e t h e y

    a r e N O T t h e a d d r e s s e s c e l l s t o h o l d t h e d a t a . I f t h e i d n u m b e r s t o r e d i n * p i d i s n o t p o s i t i v e ,

    i . e . ( * p i d

  • 7/27/2019 Chapter6 - Pointer

    32/38

    2 8 6 C H A P T E R 6 . P O I N T E R S

    / * F i l e : p a y u t i l . c - c o n t i n u e d * /

    / * F u n c t i o n c a l c u l a t e s a n d r e t u r n s t o t a l p a y * /

    f l o a t c a l c _ p a y ( f l o a t h o u r s , f l o a t r a t e , f l o a t * p r e g , f l o a t * p o v e r )

    { f l o a t t o t a l

    i f ( h o u r s > R E G _ L I M I T ) {

    * p r e g = R E G _ L I M I T * r a t e

    * p o v e r = O T _ F A C T O R * r a t e * ( h o u r s - R E G _ L I M I T )

    }

    e l s e {

    * p r e g = h o u r s * r a t e

    * p o v e r = 0

    }

    t o t a l = * p r e g + * p o v e r

    r e t u r n t o t a l

    }

    F i g u r e 6 . 2 6 : C o d e f o r c a l c p a y ( )

    / * F i l e : p a y u t i l . c - c o n t i n u e d * /

    / * F u n c t i o n r e a d s i n t h e p a y r o l l d a t a * /

    i n t g e t _ d a t a ( i n t * p i d , f l o a t * p h r s , f l o a t * p r a t e )

    {

    p r i n t f ( " T y p e I D N u m b e r , z e r o t o q u i t : " )

    s c a n f ( " % d " , p i d )

    i f ( * p i d < = 0 ) / * i f I D n u m b e r i s < = 0 , * /

    r e t u r n F A L S E / * r e t u r n 0 t o c a l l i n g f u n c t i o n * /

    p r i n t f ( " H o u r s W o r k e d : " ) / * I D n u m b e r i s v a l i d , g e t d a t a * /

    s c a n f ( " % f " , p h r s )

    p r i n t f ( " H o u r l y R a t e : " )

    s c a n f ( " % f " , p r a t e )

    r e t u r n T R U E / * v a l i d d a t a e n t e r e d , r e t u r n 1 * /

    }

    F i g u r e 6 . 2 7 : C o d e f o r g e t d a t a ( )

  • 7/27/2019 Chapter6 - Pointer

    33/38

    6 . 4 . C O M M O N E R R O R S 2 8 7

    p r o g r a m s a n d i s n o t s h o w n h e r e .

    6 . 4 C o m m o n E r r o r s

    1 . U s i n g a n u n i n i t i a l i z e d p o i n t e r . R e m e m b e r , d e c l a r i n g a p o i n t e r v a r i a b l e s i m p l y a l l o c a t e s a

    c e l l t h a t c a n h o l d a p o i n t e r | i t d o e s n o t p l a c e a v a l u e i n t h e c e l l . S o , f o r e x a m p l e , a c o d e

    f r a g m e n t l i k e :

    { i n t * i p t r

    * i p t r = 2

    }

    w i l l a t t e m p t t o p l a c e t h e v a l u e , 2 , i n t h e c e l l p o i n t e d t o b y i p t r h o w e v e r , i p t r h a s n o t b e e n

    i n i t i a l i z e d , s o s o m e g a r b a g e v a l u e w i l l b e u s e d a s t h e a d d r e s s o f t h e r e t o p l a c e t h e v a l u e .

    O n s o m e s y s t e m s t h i s m a y r e s u l t i n a n a t t e m p t t o a c c e s s a n i l l e g a l a d d r e s s , a n d a m e m o r y

    v i o l a t i o n . A v o i d t h i s e r r o r b y r e m e m b e r i n g t o i n i t i a l i z e a l l p o i n t e r v a r i a b l e s b e f o r e t h e y a r e

    u s e d .

    2 . I n s t e a d o f u s i n g a p o i n t e r t o a n o b j e c t , a p o i n t e r t o a p o i n t e r i s u s e d . C o n s i d e r a f u n c t i o n ,

    r e a d i n t ( ) . I t r e a d s a n i n t e g e r a n d s t o r e s i t w h e r e i t s a r g u m e n t p o i n t s . T h e c o r r e c t v e r s i o n

    i s :

    v o i d r e a d _ i n t ( i n t * p n )

    {

    s c a n f ( " % d " , p n )

    }

    p n i s a p o i n t e r t o t h e o b j e c t w h e r e t h e i n t e g e r i s t o b e s t o r e d . W h e n p a s s i n g t h e a r g u m e n t

    t o s c a n f ( ) , w e p a s s t h e p o i n t e r , p n , N O T & p n

    3 . C o n f u s i o n b e t w e e n t h e a d d r e s s o f o p e r a t o r a n d t h e d e r e f e r e n c e o p e r a t o r .

    . . . c a l l i n g _ f u n c ( . . . )

    { i n t x

    c a l l e d _ f u n c ( * x ) / * s h o u l d b e & x * /

    }

    . . . c a l l e d _ f u n c ( i n t & p x ) / * s h o u l d b e * p x * /

    {

    }

    A u s e f u l m n e m o n i c a i d i s t h a t t h e \ a d d r e s s o f " o p e r a t o r i s t h e \ a n d " s y m b o l , & | b o t h

    s t a r t w i t h l e t t e r , a

  • 7/27/2019 Chapter6 - Pointer

    34/38

    2 8 8 C H A P T E R 6 . P O I N T E R S

    6 . 5 S u m m a r y

    I n t h i s C h a p t e r w e h a v e i n t r o d u c e d a n e w d a t a t y p e , a p o i n t e r . W e h a v e s e e n h o w w e c a n d e c l a r e

    v a r i a b l e s o f t h i s t y p e u s i n g t h e * a n d i n d i c a t i n g t h e t y p e o f o b j e c t t h i s v a r i a b l e c a n p o i n t t o , f o r

    e x a m p l e :

    i n t * i p t r

    f l o a t * f p t r

    c h a r * c p t r

    d e c l a r e t h r e e p o i n t e r v a r i a b l e s , i p t r w h i c h c a n p o i n t t o a n i n t e g e r c e l l , f p t r w h i c h c a n p o i n t t o

    a c e l l h o l d i n g a o a t i n g p o i n t v a r i a b l e , a n d c p t r w h i c h c a n p o i n t t o a c h a r a c t e r c e l l .

    W e h a v e s e e n h o w w e c a n a s s i g n v a l u e s t o p o i n t e r v a r i a b l e s u s i n g t h e \ a d d r e s s o f " o p e r a t o r , &

    a s w e l l a s f r o m o t h e r p o i n t e r v a r i a b l e s . F o r e x a m p l e ,

    { i n t x

    i n t * i p

    i n t * i p t r

    i p t r = & x

    i p = i p t r

    }

    d e c l a r e s a n i n t e g e r v a r i a b l e , x , a n d t w o i n t e g e r p o i n t e r s , i p a n d i p t r , w h i c h c a n p o i n t t o i n t e g e r s

    ( w e c a n r e a d t h i s l a s t d e c l a r a t i o n f r o m r i g h t t o l e f t , a s s a y i n g t h a t \ i p t r p o i n t s t o a n i n t " ) . W e

    t h e n a s s i g n t h e a d d r e s s o f x t o t h e p o i n t e r v a r i a b l e , i p t r , a n d t h e p o i n t e r i n i p t r t o t h e v a r i a b l e ,

    i p

    W e h a v e a l s o s h o w n h o w p o i n t e r v a r i a b l e s m a y b e u s e d t o i n d i r e c t l y a c c e s s t h e v a l u e i n a c e l l

    u s i n g t h e d e r e f e r e n c e o p e r a t o r , * :

    y = * i p t r

    w h i c h a s s i g n s t h e v a l u e o f t h e c e l l p o i n t e d t o b y i p t r t o t h e v a r i a b l e , y . V a l u e s m a y a l s o b e s t o r e d

    i n d i r e c t l y u s i n g p o i n t e r v a r i a b l e s :

    * i p t r = y

    w h i c h a s s i g n s t h e v a l u e i n t h e v a r i a b l e , y , t o t h e c e l l p o i n t e d t o b y i p t r

    W e h a v e a l s o s e e n t h a t w e c a n p a s s p o i n t e r s t o f u n c t i o n s a n d u s e t h e m t o m o d i f y t h e v a l u e s

    o f c e l l s i n t h e c a l l i n g f u n c t i o n . F o r e x a m p l e :

  • 7/27/2019 Chapter6 - Pointer

    35/38

    6 . 5 . S U M M A R Y 2 8 9

    m a i n ( )

    { i n t x , y , z

    z = s e t _ e m ( & x , & y }

    }

    i n t s e t _ e m ( i n t * a , i n t * b )

    {

    * a = 1

    * b = 2

    r e t u r n 3

    }

    H e r e t h e f u n c t i o n , s e t e m w i l l s e t t h e v a l u e s 1 , 2 , a n d 3 i n t o t h e v a r i a b l e s x , y , a n d z r e s p e c t i v e l y .

    T h e r s t t w o v a l u e s a r e a s s i g n e d i n d i r e c t l y u s i n g t h e p o i n t e r s p a s s e d t o t h e f u n c t i o n , a n d t h e t h i r d

    i s r e t u r n e d a s t h e v a l u e o f t h e f u n c t i o n a n d a s s i g n e d t o z b y t h e a s s i g n m e n t s t a t e m e n t i n m a i n ( )

    T h i s , t h e f u n c t i o n , s e t e m ( ) , h a s \ e e c t i v e l y " r e t u r n e d t h r e e v a l u e s .

    F i n a l l y , w e h a v e u s e d t h i s n e w i n d i r e c t a c c e s s m e c h a n i s m t o w r i t e s e v e r a l p r o g r a m s , i n c l u d i n g

    a n u p d a t e t o o u r p a y r o l l p r o g r a m . A s w e w i l l s e e i n s u c c e e d i n g c h a p t e r s , p o i n t e r s a r e v e r y u s e f u l

    i n d e v e l o p i n g c o m p l e x p r o g r a m s . T h e c o n c e p t o f p o i n t e r s m a y b e c o n f u s i n g a t r s t , h o w e v e r , a

    u s e f u l t o o l f o r u n d e r s t a n d i n g t h e b e h a v i o r o f a p r o g r a m u s i n g p o i n t e r s i s t o d r a w t h e m e m o r y

    p i c t u r e s h o w i n g w h i c h t o c e l l s e a c h p o i n t e r i s p o i n t i n g .

  • 7/27/2019 Chapter6 - Pointer

    36/38

    2 9 0 C H A P T E R 6 . P O I N T E R S

    6 . 6 E x e r c i s e s

    1 . W h a t i s t h e o u t p u t o f t h e f o l l o w i n g c o d e ?

    i n t x , y , z , w

    i n t * p a , * p b , * p c , * p d

    x = 1 0 y = 2 0 z = 3 0

    p a = & x

    p b = & y

    p r i n t f ( " % d , % d , % d \ n " , * p a , * p b , * p c )

    p c = p b

    p r i n t f ( " % d , % d , % d \ n " , * p a , * p b , * p c )

    p b = p a

    p r i n t f ( " % d , % d , % d \ n " , * p a , * p b , * p c )

    p a = & z

    p r i n t f ( " % d , % d , % d \ n " , * p a , * p b , * p c )

    * p a = * p b

    p r i n t f ( " % d , % d , % d \ n " , * p a , * p b , * p c )

    W h a t i s t h e o u t p u t f o r e a c h o f t h e f o l l o w i n g p r o g r a m s :

    2 # d e f i n e S W A P ( x , y ) { i n t t e m p t e m p = x x = y y = t e m p )

    m a i n ( )

    { i n t d a t a 1 = 1 0 , d a t a 2 = 2 0

    S W A P ( d a t a 1 , d a t a 2 )

    p r i n t f ( " D a t a 1 = % d , d a t a 2 = % d \ n " , d a t a 1 , d a t a 2 )

    }

    3 # d e f i n e S W A P ( x , y ) { i n t * t e m p t e m p = x x = y y = t e m p )

    m a i n ( )

    { i n t d a t a 1 = 1 0 , d a t a 2 = 2 0

    i n t * p 1 , * p 2

    p 1 = & d a t a 1 p 2 = & d a t a 2

    S W A P ( p 1 , p 2 )

    p r i n t f ( " * p 1 = % d , * p 2 = % d \ n " , * p 1 , * p 2 )

    }

    C o r r e c t t h e c o d e i n t h e f o l l o w i n g p r o b l e m s :

    4 m a i n ( )

    { i n t x , * p

    x = 1 3

    i n d _ s q u a r e ( * p )

    }

  • 7/27/2019 Chapter6 - Pointer

    37/38

    6 . 6 . E X E R C I S E S 2 9 1

    i n d _ s q u a r e ( i n t * p )

    {

    * p = * p * * p

    }

    5 m a i n ( )

    { i n t x , * p

    x = 1 3 p = & x

    i n d _ s q u a r e ( & p )

    }

    i n d _ s q u a r e ( i n t & p )

    {

    * p = * p * * p

    }

    6 m a i n ( )

    { i n t x , * p

    x = 1 3

    i n d _ s q u a r e ( x )

    }

    i n d _ s q u a r e ( i n t * p )

    {

    * p = * p * * p

    }

    7 m a i n ( )

    { i n t x , * p

    x = 1 3

    i n d _ s q u a r e ( p )

    }

    i n d _ s q u a r e ( i n t * p )

    {

    * p = * p * * p

    }

  • 7/27/2019 Chapter6 - Pointer

    38/38

    2 9 2 C H A P T E R 6 . P O I N T E R S

    6 . 7 P r o b l e m s

    1 . W r i t e a p r o g r a m t h a t i n i t i a l i z e s i n t e g e r t y p e v a r i a b l e s , d a t a 1 a n d d a t a 2 t o t h e v a l u e s 1 2 2

    a n d 3 1 2 . D e c l a r e p o i n t e r s , p t r 1 a n d p t r 2 i n i t i a l i z e p t r 1 t o p o i n t t o d a t a 1 a n d p t r 2 t o

    p o i n t t o d a t a 2 . S w a p t h e v a l u e s o f d a t a 1 a n d d a t a 2 v a l u e s u s i n g d i r e c t a c c e s s a n d u s i n g

    i n d i r e c t a c c e s s . N e x t , s w a p t h e v a l u e s o f t h e p o i n t e r s , p t r 1 a n d p t r 2 a n d p r i n t t h e v a l u e s

    i n d i r e c t l y a c c e s s e d b y t h e s w a p p e d p o i n t e r s .

    2 . W r i t e a f u n c t i o n ( t h a t r e t u r n s v o i d ) w h i c h r e a d s a n d i n d i r e c t l y s t o r e s t h r e e v a l u e s i n t h e

    c a l l i n g f u n c t i o n . T h e t y p e s o f t h e t h r e e d a t a i t e m s a r e a n i n t e g e r , a c h a r a c t e r , a n d a o a t .

    3 . W r i t e a f u n c t i o n m a x m i n ( f l o a t x , f l o a t * p m a x , f l o a t * p m i n ) w h e r e x i s a n e w v a l u e

    w h i c h i s t o b e c o m p a r e d w i t h t h e l a r g e s t a n d t h e s m a l l e s t v a l u e s p o i n t e d t o b y p m a x a n d

    p m i n , r e s p e c t i v e l y . T h e f u n c t i o n s h o u l d i n d i r e c t l y u p d a t e t h e l a r g e s t a n d t h e s m a l l e s t v a l u e s

    a p p r o p r i a t e l y . W r i t e a p r o g r a m t h a t r e a d s a s e q u e n c e o f n u m b e r s a n d u s e s t h e a b o v e f u n c t i o n

    t o u p d a t e t h e m a x i m u m a n d t h e m i n i m u m u n t i l e n d o f l e , w h e n t h e m a x i m u m a n d t h e

    m i n i m u m s h o u l d b e p r i n t e d .

    4 . R e p e a t P r o b l e m 2 . 1 0 u s i n g f u n c t i o n s g e t c o u r s e d a t a ( ) , c a l c g p r ( ) , a n d p r i n t g p r ( )

    5 . R e w r i t e P r o b l e m 5 . 1 a s a f u n c t i o n t h a t n d s t h e r o o t s o f a q u a d r a t i c a n d r e t u r n s t h e m

    i n d i r e c t l y .

    6 . R e w r i t e t h e p r o g r a m t o s o l v e s i m u l t a n e o u s e q u a t i o n s ( P r o b l e m 5 . 1 0 ) . T h e p r o g r a m s h o u l d

    u s e a f u n c t i o n , s o l v e e q n s ( ) t o s o l v e f o r t h e u n k n o w n s . T h e f u n c t i o n m u s t i n d i r e c t l y a c c e s s

    o b j e c t s i n m a i n ( ) t o s t o r e t h e s o l u t i o n v a l u e s .

    7 . W r i t e a m e n u - d r i v e n p r o g r a m t h a t u s e s t h e f u n c t i o n , s o l v e e q n s ( ) , o f P r o b l e m 6 . T h e

    c o m m a n d s a r e : g e t d a t a , d i s p l a y d a t a , s o l v e e q u a t i o n s , p r i n t s o l u t i o n , v e r i f y s o l u t i o n , h e l p ,

    a n d q u i t . U s e f u n c t i o n s t o i m p l e m n e n t t h e c o d e f o r e a c h c o m m a n d .

    8 . A r a t i o n a l n u m b e r i s m a i n t a i n e d a s a r a t i o o f t w o i n t e g e r s , e . g . , 2 0 / 2 3 , 3 5 / 4 6 , e t c . R a t i o n a l

    n u m b e r a r i t h m e t i c a d d s , s u b t r a c t s , m u l t i p l i e s a n d d i v i d e s t w o r a t i o n a l n u m b e r s . W r i t e a

    f u n c t i o n t o a d d t w o r a t i o n a l n u m b e r s .

    9 . W r i t e a f u n c t i o n t o s u b t r a c t t w o r a t i o n a l n u m b e r s .

    1 0 . W r i t e a f u n c t i o n t o m u l t i p l y t w o r a t i o n a l n u m b e r s .

    1 1 . W r i t e a f u n c t i o n t o d i v i d e t w o r a t i o n a l n u m b e r s .

    1 2 . W r i t e a f u n c t i o n t o r e d u c e a r a t i o n a l n u m b e r . A r e d u c e d r a t i o n a l n u m b e r i s o n e i n w h i c h

    a l l c o m m o n f a c t o r s i n t h e n u m e r a t o r a n d t h e d e n o m i n a t o r h a v e b e e n c a n c e l l e d o u t . F o r

    e x a m p l e , 2 0 / 3 0 i s r e d u c e t o 2 / 3 , 2 4 / 1 8 i s r e d u c e d t o 4 / 3 , a n d s o f o r t h .

    1 3 . U s e t h e f u n c t i o n , r e d u c e ( ) , o f P r o b l e m 1 2 t o i m p l e m e n t t h e f u n c t i o n s i n P r o b l e m s 8 t h r o u g h

    1 1

    1 4 . R e w r i t e t h e p r o g r a m o f P r o b l e m 5 . 1 3 t o c a l c u l a t e t h e c u r r e n t a n d t h e p o w e r i n a r e s i s t o r

    u s i n g a f u n c t i o n i n s t e a d t o p e r f o r m t h e c a l c u l a t i o n s . O n e v a l u e m a y b e r e t u r n e d a s a f u n c t i o n