SlideShare uma empresa Scribd logo
1 de 15
17
                         POINTERS



17.1 INTRODUCTION

As you know by now, variables are stored in memory. Each memory
location has a numeric address, in much the same way that each
element of an array has its own subscript. Variable names in C and
other high-level languages enable the programmer to refer to memory
locations by name, but the compiler must translate these names
into addresses. A pointer is a variable that represents the location of
a data item, such as a variable or an array element. Pointers are
used frequently in C. Pointers can be used to pass information back
and forth between a function and its reference point. In particular,
pointers provide a way to return multiple data items from a function
via function arguments. Pointers also permit references to other
functions to be specified as arguments to a given function. This has
the effect of passing functions as arguments to the given function.

17.2 OBJECTIVES

After going through this lesson you will be in a position to

    explain address operator
    define pointer declarations
Pointers :: 265



     describe pointers and one-dimensional arrays
     define pointers and multidimensional arrays
     explain arrays of pointers


17.3 THE ADDRESS OPERATOR

Within a computer’s memory, every stored data item occupies one
or more contiguous memory cells. The number of memory cells re-
quired to store a data item depends on the type of data item. For
example, a single character will typically be stored in 1 byte of
memory, an integer requires two contiguous bytes. A floating point
number may require four contigueous bytes, and a double precision
quantity may require eight contiguous bytes.

Suppose 'a' is a variable that represents some particular data item.
The compiler will automatically assign memory cells for this data
item. The data item can be accessed if we know the location of the
first memory cell. The address of a’s memory location can be deter-
mined by the expression &v, where & is a unary operator called the
address operator, that evaluates the address of its operand. Now let
us assign the address of 'a' to another variable,

Thus

pa= &a;

This new variable is called a pointer to 'a', since it “points” to the
locations where 'a' is stored in memory. However, pa represents a’s
address, not its value. Thus, pa is referred to as a pointer variable.

Address of a → value of a
pa           a

The data item represented by 'a' ( i.e the data item stored in a’s
memory cells) can be accessed by the expression *pa, where * is a
unary operator, called the indirection operator, that operates only
on a pointer variable. Therefore, *pa and 'a' both represent the
same data item (ie the contents of the same memory cells). Further
more if we write pa= &a and b = *pa, then 'a' and 'b' will both
represents the same value i.e the value of a will indirectly be as-
signed to 'b'
266 :: Computer Applications



                        Let us consider an example :

                               # include <stdio.h>
                               main ( )
                               {
                               int a=3;
                               int b;
                               int *pa; /* to an integer */
                               int *pb;/*pointer to an integer */
                               pa=&a;/* assign address of a to pa */
                               b=*pa;/* assign value of a to b*/
                               pb=&b;/* assign address of b to pb */
                               printf (“n% d %d % d %d”, a, &a,pa, *pa);
                               printf (“n% d %d % d %d”, b, &b, pb, *pb);
                               }

                        The output is :         3    F8E    F8E   3
                                                3    F8C F8C       3

                        The unary operators & and * are members of the same precedence
                        group as the other unary operators i.e. -, ++, —, ! , size of and(type).
                        The address operator (&) must act upon operands associated with
                        unique addresses, such as ordinary variables or single array ele-
                        ments. Thus, the address operator cannot act upon arithmetic ex-
                        pression, such as 2*(a+b). The indirection operator(*) can only act
                        upon operands that are pointers.

                        Let us consider an example

                               # include <stdio.h>
                               main()
                               {
                               int i=3,* j;k;   /*j is a pointer to integer */
                               j=&i;      /*j points to the location of i*/
                               k=*j ;           /*assign to k the value pointed to by j*/
                               *j=4             /assign 4 to the location pointed to by j*/
                               printf(“i=%d, *j=%d, k=%dn,” i, *j, k);
                               }
                               The output is as follows:
Pointers :: 267



     i=4,*j=4, k=3

17.4 POINTER DECLARATION

Pointer variables, like all other variables, must be declared before
they may be used in a C program. The interpretation of a pointer
declaration is somewhat different than the interpretation of other
variable declarations. When a pointer variable is declared, the variable
name must be preceded by an asterisk(*). This identifies the fact
that the variable is a pointer. The data type that appears in the
declaration refers to the object of the pointer, i.e the data item that
is stored in the address represented by the pointer, rather than the
pointer itself.

Thus, a pointer declaration may be written in general terms as
datatype *ptr;

Where ptr is the name of the pointer variable and data-type refers to
the data type of the pointer’s object.

For example,

           float a,b;
           float *pb;

The first line declares a and b to be floating-point variables. The
second line declares pb to be a pointer variable whose object is a
floating-point quantity i.e. 'pb' point to a floating point quantity. 'pb'
represents an address, not a floating-point quantity.

Within a variable declaration, a pointer variable can be initialized
by assigning it the address of another variable.

17.5 POINTERS AS ARGUMENTS

Pointers are often passed to a function as arguments. This allows
data items within the calling portion of the program to be accessed
by the function, altered within the function, and then returned to
the calling portion of the program in altered form.

When an argument is passed by value, the data item is copied to the
function. Thus any alteration made to the data item within the func-
tion is not carried over into the calling routine when an argument
is passed by reference, however the address of a data item is passed
to the function. The contents of that address can be accessed freely,
268 :: Computer Applications



                        either within the function or within the calling routine. Moreover,
                        any change that is made to the data item will be recognized in both
                        the function and the calling routine. Thus, the use of a pointer as a
                        function argument permits the corresponding data item to be al-
                        tered globally from within the function.

                        If formal arguments are pointers, then each must be preceded by an
                        asterisk. Also, if a function declaration is included in the calling
                        portion of the program, the data type of each argument that corre-
                        sponds to a pointer must be followed by an asterisk.

                        Let us consider an example of passing by reference

                               #include <stdio.h>
                               main ()
                               {
                               int i,j;
                               i=2;
                               j=5;
                               printf(“i=%d and j=%dn”, i,j);
                               /* Now exchange them */
                               swap(&i,&j);
                               printf(“nnow i=%d and j=%dn”, i,j);
                               }
                               swap(i,j)
                               int *i,*j;
                               {
                               int temp=*i; /* create temp and store into it the value pointed
                               to by “i”*/
                               *i=*j; /*The value pointed to by j is stored in the location pointed
                               to by i*/
                               *j=temp;/* Assign temp to the location pointed to by j*/
                               }
                               The output is as follows:
                               i=2 and j=5
                               Now i=5 and j=2

                        If the formal parameters i and j of the swap function were declared
                        merely as integers, and the main function passed only i and j rather
Pointers :: 269



than their addresses, the exchange made in swap would have no
effect on the variables i and j in main. The variable temp in swap
function is of type int, not int*. The values being exchanged are not
the pointers, but the integers being pointed to by them. Also temp
is initialized immediately upon declaration to the value pointed to
by i.

Let us consider it again with the help of another example:-

The following program counts the no. of vowels and consonants in a
line of text with the help of pointers.

     # include <stdio.h>
     main()
     {
     char str[80];
     int vowels=0;
     int consonants=0;
     void scan_line(char str[ ], int *v, int *c);
     printf(“Enter a line of textn”);
     scanf(“%[ “n]” , str);
     scan_line(str, &vowels, &consonants);
     printf(“No. of vowels %d”,vowels);
     printf(“No. of consonants %d”, consonants);
     }
     void scan_line(char str[ ], int * v, int *c)
     {
     char c;
     int count=0;
     while ((c=toupper(str[count]))!=’0’)
     {
     if(c = = A !!  c= =E !! c= =I !!   c= =O !!    c= =U)
     ++*v;
     else if(c>=’A’&& c<=’Z’)
     ++*c;
     ++ count;
     }
270 :: Computer Applications



                               return;
                               }

                        It is possible to pass a portion of an array, rather than an entire
                        array, to a function. To do so, the address of the first array element
                        to be passed must be specified as an argument. The remainder of
                        the array, starting with the specified array element, will then be
                        passed to the function.

                        INTEXT QUESTIONS

                        1.     What numeric value is associated with every memory location ?
                        2.     How are variable names translated to their corresponding ad-
                               dresses?
                        3.     What must be done to a pointer variable before it can be put to
                               use?
                        4.     What is the role played by the & operator in a call to the scanf
                               function ?
                        5.     Can addresses be stored ? If so, where ?

                        17.6 POINTERS AND ONE MIDEMNSIONAL ARRAYS

                        Array name is really a pointer to the first element in that array.
                        Therefore, if x is a one-dimensional array, then the address of the
                        first array element can be expressed as either &x[0] or x. Similarly,
                        the address of the second array element can be written as either & x
                        [1] or as (x+1) and so on. Here we should keep it in mind that the
                        expression (x+1) is a symbolic representation for an address specifi-
                        cation rather than an arithmetic expression. When writing the
                        address of an array element in the form(x+i), there is no need to
                        concern with the number of memory cells associated with each type
                        of array element, the C compiler adjusts for this automatically. The
                        programmer must specify only the address of the first array element
                        and the number of array elements beyond the first.

                        Since &x[i] and (x+i) both represent the address of the ith element of
                        x then x [i] and *(x+i) both represent the contents of that address.
                        The two terms are interchangeble.

                        When assigning a value to an array element such as x[i] the left side
                        of the assignment statement may be written as either x[i]or *(x+i).
Pointers :: 271



Thus a value may be assigned directly to an array element, or it
may be assigned to the memory area whose address is that of the
array element . Thus expression such as x,(x+i) and &x [i] cannot
appear on the left side of an assignment statement.

Numerical array elements cannot be assigned initial values if the
array is defined as a pointer variable. Therefore a conventional array
definition is required if initial values will be assigned to the ele-
ments of a numerical array.

Let us assume that x is to be defined as a one-adimentional, 10
element array of integers. It is possible to define x as a pointer
variable rather than as an array. Thus we can write int *x; instead of
int x[10];

However x is not automatically assigned a memory block when it is
defined as a pointer variable, To assign sufficient memory for x ,we
can make use of the library function malloc as follows :

x= malloc (10*size of (int));

This function reserves a block of memory whose size is equivalent to
the size of an integer quantity. The function return a pointer to a
character. If the declaration is to include the assignment of initial
values, then x must be defined as an array rather then as a pointer
variable for example

            int x[10]= {1,2,3,4,5,6,7,8,9,10};
               or int x[]= {1,2,3,4,5,6,7,8,9,10};

For character arrays you can write them in the form of pointer as
char*x="this is string";

17.7 ARITHMETICS ON POINTERS

An integer value can be added to or subtracted from a pointer vari-
able. For example, px is a pointer variable representing the address
of some variable x. We can write expressions such as a ++ px ,- - px
( px +3 ),( px+i ) and (px – i ) where i is an integer variable. Each
expression will represent an address located some distance from
the original address represented by px. The exact distance will be
the product of the integer quantity and the number. of bytes or
words associated with the data item to which px points. One pointer
variable can be subtracted from another provided both variables
points to elements of the same array. The resulting value indicates
the number of words or bytes separating the corresponding array
elements.
272 :: Computer Applications



                        Pointer variables can be compared provided both variables point to
                        objects of the same data type. Such comparisons can be useful when
                        both pointer variables point to elements of the same array. The fol-
                        lowing points must be kept in mind about operations on pointers:-

                        –      A pointer variable can be assigned the address of an ordinary
                               variable.

                        –      A pointer variable can be assigned the value of another pointer
                               variable provided both pointers point to objects of the same data
                               type.

                        –      An integer quantity can be added to or subtracted from a pointer
                               variable.

                        –      A pointer variable can be assigned a null (zero) value.

                        –      One pointer variable can be subtracted from another provided
                               both pointers point to elements of the same array.

                        –      Two pointer variables can be compared provided both pointers
                               point to objects of the same data type.

                        17.8 POINTERS AND MULTIDIMENSIONAL ARRAYS

                        A two dimensional array, is actually a collection of one dimensional
                        arrays. Therefore, we can define a two dimensional array as a pointer
                        to a group of contiguous one-dimensional arrays. A two dimensional
                        array declaration can be written as

                               data type (*ptr) [expression2];

                        Notice the parentheses that surround the array name and the pre-
                        ceding asterisk in the pointer version of each declaration. These
                        parentheses must be present. Without them we would be defining
                        an array of pointers rather than a pointer to a group of arrays, since
                        these particulars symbols (i.e. The square brackets and asterisk)
                        would normally be evaluated right-to-by.

                        For example, if x is a two dimensional integer array having 10 rows
                        and 20 columns, then we can declare x as

                               int(*x)[20];
                               rather than int x(10) (20);
Pointers :: 273



     Similarly, three dimmensional integer array can be written as
int (*x) (20) (30)

An individual array element within a multi-dimensional array can
be accessed by repeatedly using the indirection operator. If n is a
2D array having 10 rows and 20 columns, then item in row 2, column
5 can be accessed by writing either

     x[2][5]
     or
     *(*(x+2)+5)

Here, (x+2) is a pointer to row 2. Therefore, the object of this pointer
*(x+2), refers to the entire row. Since row 2 is a one-dimensional
array, *(x+2) is actually a pointer to the first element in row 2. We
now add 5 to this pointer. Hence,(*(x+2)x5) is a pointer to element 5
in row 2. The object of this pointer, (*(x+2)+5) therefore refers to the
item in column 5 of row2 which is x[2][5].

INTEXT QUESTIONS

6.   What is meant by passing by reference ?

7.   Why is only the address of an array’s first element necessary in
     order to access the entire array ?

8.   If an array is declared as

     char x[10][12];

     What is referred to by x[5] ?

17.9 ARRAYS OF POINTERS

A multi-dimensional array can be expressed in terms of an array of
pointers rather than as a pointer to a group of contiguous arrays. In
such cases the newly defined array will have one less dimension
than the original multi-dimensional array. Each pointer will indi-
cate the beginning of a separate (n-1) dimensional array.

In general terms, a 2D array can be defined as a one dimensional
array of pointers by writing.
274 :: Computer Applications



                        data type *array [expression 1];

                        In this type of declaration, array name and its preceding asterisk
                        are not enclosed in parentheses. Thus, a right-to-left rule first asso-
                        ciates the pairs of square brackets with array, defining the named
                        object as an array. The preceding asterisk then establishes that the
                        array will contain pointers.

                        For example x is a 2D integer array having 10 rows and 20 columns.
                        We can define x as a one-dimensional array of pointers by writing

                        int *x[10];

                        An individual array element, such as x[2][5], can be accessed by
                        writing *(x[2]+5)

                        In this expression, x[2] is a pointer to the first element in row 2, so
                        that (x[2]    +5) points to element 5 within row 2. The object of this
                        pointer, *(x[2]+5), therefore refers to x[2][5].

                        Pointer arrays offer a particularly convenient method for storing
                        strings. In this situation, each array element is a character-type
                        pointer that indicates the beginning of a separate string. Each indi-
                        vidual string can be accessed by referring to its corresponding
                        pointer.

                        Let us consider an example of array of pointers: (To sort list of strings)

                               #include<stdio.h>
                               #include<stdlib.h>
                               main()
                               {
                               int i, n=0;
                               char *x[10];
                               int reorder(int n, char *x[]);
                               printf(“Enter each string on a separate line,)
                               "Type'END' to finish”);
                               do
                               {
                               x[n]=malloc(12*size of (char));
                               printf(“nstring %d”, n+1);
                               scanf(“%s”, x[n]);
Pointers :: 275



     }
     while ( stringcmp(x[n++], “END”));
     reorder(- - n,x);
     printf (or nn Recordered List:n");
     for(i=0; i<n; ++i)
     printf(“n string %d:%s”, i+1, x[i]);
     }
     reorder(int n, char * x[])
     {
     char *temp;
     int i, item;
     for(item=0; item <n-1; ++ item)
     for(i=item +1; i<n; ++i)
     if (stringcmp(x[item], x[i]>0)
     {
     temp=x[item];
     x[item]=x[i];
     x[i]=temp;
     }
     return;
     }

An advantage to use arrays of pointers is that a fixed block of memory
need not be reserved in advance, as is done when initializing a con-
ventional array.

If some of the strings are particularly long, there is no need to worry
about the possibility of exceeding some maximum specified string
length. Arrays of this type are oftern referred to as ragged arrays.

17.10 PASSING FUNCTIONS TO OTHER FUNCTIONS

When a function declartion appears within another function, the
name of the function being declared becomes a pointer to that
function. Such pointer can be passed to other functions as
arguments. This has the effect of passing one function to another ,
as though the first function was a variable. The first functiion can
then be accessed within the second function. Successive calls to the
second function can pas different pointers to the second funtion.
276 :: Computer Applications



                        When a function accepts another function’s name as an argument a
                        formal argument declaration must identify that argument as a pointer
                        to another function. A formal argument that is a pointer to a function
                        can be declared as

                        data-type (*function name)();

                        Where data-type refers to the data type of the quantity returned by
                        the function.

                        This function can then be accessed by means of the indirection
                        operator. To do so the indirection operator must precede the func-
                        tion name. Both the indirection operator and the function name
                        must be enclosed in parentheses that is

                        (*function-name)(argument 1, argument 2…, argument n);

                        In the last, we mention that pointer declaration can become
                        complicated and some care is required for its interpretation. This is
                        particularly take in case of declarations that involve functions or
                        arrays.

                        One difficulty is the dusl use of parentheses. In particular,
                        parentheses are used to indicate functions and they are used for
                        nesting purposes within more complicated declarations. Thus the
                        declaration

                        int *p(int a);

                        Indicates a function that accepts an integer argument, and returns
                        a pointer to an integer. On the other hand, the declaration.

                        int(*p)(int a);

                        indicates a pointer to a function that accepts an integer argument
                        and returns an integer. In this last declaration, the first pair of pa-
                        rentheses is used for nesting and the second pair is used to indicate
                        a function.

                        17.11 WHAT YOU HAVE LEARNT

                        In this lesson you have learnt about pointers. You can now declare
                        pointers very effciently. Now you can pass pointers to a function.
                        You can do operations on pointer. Now you are familiar with arrays
                        of pointers. You can use pointers with one as well as multi dimen-
                        sional arrays.
Pointers :: 277



17.12 TERMINAL QUESTIONS

1.   What is meant by the address of a memory cell?
2.   What kind of information does a pointer variable represent ?
3.   How is a pointer variable declared ?
4.   How can a function return a pointer to its calling routine ?
5.   How is a multidimensional array defined in terms of a pointer to
     a collection of contiguous arrays of lower dimensioanlity ?
6.   A ‘C’ program contains the following declaration :

     Static int x[8]= {10,20,30,40,50,60,70,80};

     (a)   What is the meaning of x?

     (b)   What is the meaning of (x+2) ?

     (c)   What is the value of *x?

     (d)   What is the value of (*x+2) ?

     (e)   What is the value of *(x+2) ?

7.   Write a program to find the length of a string using the concept
     of pointers

8.   Write a program to copy a string using pointers.

9.   Write a program to concatenate two strings using pointers.

10. Write a program to compare two strings using pointers.

17.13 KEY TO IN-TEXT QUESTIONS

1.   its address
2.   with the & operator
3.   After it has been declared, it must be initialized
4.   It passes the address of the variable being input, making it pos-
     sible for the contents of that location to be changed.
278 :: Computer Applications



                        5.     Addresses can be stored in pointer variables.

                        6.     Passing by reference is the term used to refer to the passing of a
                               variable’s address to a function.

                        7.     Since all the elements of an array are of the same type, and all
                               the elements are stored continguously in memory, the location
                               of the first element can be used to find the second element, the
                               third element, and so forth.

                        8.     x[5] is a pointer to the sixth row (row #5) of the array.

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Pointer in C
Pointer in CPointer in C
Pointer in C
 
C pointer
C pointerC pointer
C pointer
 
VIT351 Software Development VI Unit3
VIT351 Software Development VI Unit3VIT351 Software Development VI Unit3
VIT351 Software Development VI Unit3
 
Pointer in C
Pointer in CPointer in C
Pointer in C
 
Lk module5 pointers
Lk module5 pointersLk module5 pointers
Lk module5 pointers
 
C programming - Pointers
C programming - PointersC programming - Pointers
C programming - Pointers
 
Basics of pointer, pointer expressions, pointer to pointer and pointer in fun...
Basics of pointer, pointer expressions, pointer to pointer and pointer in fun...Basics of pointer, pointer expressions, pointer to pointer and pointer in fun...
Basics of pointer, pointer expressions, pointer to pointer and pointer in fun...
 
Function Pointer
Function PointerFunction Pointer
Function Pointer
 
Pointers-Computer programming
Pointers-Computer programmingPointers-Computer programming
Pointers-Computer programming
 
Pointer in C
Pointer in CPointer in C
Pointer in C
 
Fundamentals of Pointers in C
Fundamentals of Pointers in CFundamentals of Pointers in C
Fundamentals of Pointers in C
 
Lecturer23 pointersin c.ppt
Lecturer23 pointersin c.pptLecturer23 pointersin c.ppt
Lecturer23 pointersin c.ppt
 
Advanced pointers
Advanced pointersAdvanced pointers
Advanced pointers
 
Pointers in C Programming
Pointers in C ProgrammingPointers in C Programming
Pointers in C Programming
 
USER DEFINED FUNCTIONS IN C MRS.SOWMYA JYOTHI.pdf
USER DEFINED FUNCTIONS IN C MRS.SOWMYA JYOTHI.pdfUSER DEFINED FUNCTIONS IN C MRS.SOWMYA JYOTHI.pdf
USER DEFINED FUNCTIONS IN C MRS.SOWMYA JYOTHI.pdf
 
Pointers in C/C++ Programming
Pointers in C/C++ ProgrammingPointers in C/C++ Programming
Pointers in C/C++ Programming
 
Pointers C programming
Pointers  C programmingPointers  C programming
Pointers C programming
 
Pointers in c++
Pointers in c++Pointers in c++
Pointers in c++
 
Strings-Computer programming
Strings-Computer programmingStrings-Computer programming
Strings-Computer programming
 
Functions-Computer programming
Functions-Computer programmingFunctions-Computer programming
Functions-Computer programming
 

Destaque

Chapter 13.1.11
Chapter 13.1.11Chapter 13.1.11
Chapter 13.1.11patcha535
 
ประมวลรายวิชา 4123501
ประมวลรายวิชา 4123501ประมวลรายวิชา 4123501
ประมวลรายวิชา 4123501patcha535
 
Chapter 13.1.5
Chapter 13.1.5Chapter 13.1.5
Chapter 13.1.5patcha535
 
Good Practices For Web Conferencing
Good Practices For Web ConferencingGood Practices For Web Conferencing
Good Practices For Web ConferencingPeter Williams
 
Chapter 12.3 (homework)
Chapter 12.3 (homework)Chapter 12.3 (homework)
Chapter 12.3 (homework)patcha535
 
Chapter 13.1.6
Chapter 13.1.6Chapter 13.1.6
Chapter 13.1.6patcha535
 
Chapter 13.1.4
Chapter 13.1.4Chapter 13.1.4
Chapter 13.1.4patcha535
 
Panoptik Facilities Solution Pvt Ltd-Company Brochure
Panoptik Facilities Solution Pvt Ltd-Company BrochurePanoptik Facilities Solution Pvt Ltd-Company Brochure
Panoptik Facilities Solution Pvt Ltd-Company BrochureJAIDEEP BHATTACHARJEE
 

Destaque (9)

Chapter 13.1.11
Chapter 13.1.11Chapter 13.1.11
Chapter 13.1.11
 
ประมวลรายวิชา 4123501
ประมวลรายวิชา 4123501ประมวลรายวิชา 4123501
ประมวลรายวิชา 4123501
 
Chapter 13.1.5
Chapter 13.1.5Chapter 13.1.5
Chapter 13.1.5
 
Good Practices For Web Conferencing
Good Practices For Web ConferencingGood Practices For Web Conferencing
Good Practices For Web Conferencing
 
Chapter 12.3 (homework)
Chapter 12.3 (homework)Chapter 12.3 (homework)
Chapter 12.3 (homework)
 
Chapter 9.2
Chapter 9.2Chapter 9.2
Chapter 9.2
 
Chapter 13.1.6
Chapter 13.1.6Chapter 13.1.6
Chapter 13.1.6
 
Chapter 13.1.4
Chapter 13.1.4Chapter 13.1.4
Chapter 13.1.4
 
Panoptik Facilities Solution Pvt Ltd-Company Brochure
Panoptik Facilities Solution Pvt Ltd-Company BrochurePanoptik Facilities Solution Pvt Ltd-Company Brochure
Panoptik Facilities Solution Pvt Ltd-Company Brochure
 

Semelhante a Chapter 13.1.8

EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdf
EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdfEASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdf
EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdfsudhakargeruganti
 
btech-1picu-5pointerstructureunionandintrotofilehandling-150122010700-conver.ppt
btech-1picu-5pointerstructureunionandintrotofilehandling-150122010700-conver.pptbtech-1picu-5pointerstructureunionandintrotofilehandling-150122010700-conver.ppt
btech-1picu-5pointerstructureunionandintrotofilehandling-150122010700-conver.pptchintuyadav19
 
chapter-7 slide.pptx
chapter-7 slide.pptxchapter-7 slide.pptx
chapter-7 slide.pptxcricketreview
 
Arrays to arrays and pointers with arrays.pptx
Arrays to arrays and pointers with arrays.pptxArrays to arrays and pointers with arrays.pptx
Arrays to arrays and pointers with arrays.pptxRamakrishna Reddy Bijjam
 
pointer, structure ,union and intro to file handling
pointer, structure ,union and intro to file handlingpointer, structure ,union and intro to file handling
pointer, structure ,union and intro to file handlingRai University
 
Unit-I Pointer Data structure.pptx
Unit-I Pointer Data structure.pptxUnit-I Pointer Data structure.pptx
Unit-I Pointer Data structure.pptxajajkhan16
 
Btech 1 pic u-5 pointer, structure ,union and intro to file handling
Btech 1 pic u-5 pointer, structure ,union and intro to file handlingBtech 1 pic u-5 pointer, structure ,union and intro to file handling
Btech 1 pic u-5 pointer, structure ,union and intro to file handlingRai University
 
pointer, structure ,union and intro to file handling
pointer, structure ,union and intro to file handlingpointer, structure ,union and intro to file handling
pointer, structure ,union and intro to file handlingRai University
 
46630497 fun-pointer-1
46630497 fun-pointer-146630497 fun-pointer-1
46630497 fun-pointer-1AmIt Prasad
 

Semelhante a Chapter 13.1.8 (20)

pointers.pptx
pointers.pptxpointers.pptx
pointers.pptx
 
pointers.pptx
pointers.pptxpointers.pptx
pointers.pptx
 
EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdf
EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdfEASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdf
EASY UNDERSTANDING OF POINTERS IN C LANGUAGE.pdf
 
btech-1picu-5pointerstructureunionandintrotofilehandling-150122010700-conver.ppt
btech-1picu-5pointerstructureunionandintrotofilehandling-150122010700-conver.pptbtech-1picu-5pointerstructureunionandintrotofilehandling-150122010700-conver.ppt
btech-1picu-5pointerstructureunionandintrotofilehandling-150122010700-conver.ppt
 
PSPC--UNIT-5.pdf
PSPC--UNIT-5.pdfPSPC--UNIT-5.pdf
PSPC--UNIT-5.pdf
 
C pointers and references
C pointers and referencesC pointers and references
C pointers and references
 
chapter-7 slide.pptx
chapter-7 slide.pptxchapter-7 slide.pptx
chapter-7 slide.pptx
 
Pointers
PointersPointers
Pointers
 
Pointer
PointerPointer
Pointer
 
SPC Unit 3
SPC Unit 3SPC Unit 3
SPC Unit 3
 
iit c prog.ppt
iit c prog.pptiit c prog.ppt
iit c prog.ppt
 
Pointers
PointersPointers
Pointers
 
Arrays to arrays and pointers with arrays.pptx
Arrays to arrays and pointers with arrays.pptxArrays to arrays and pointers with arrays.pptx
Arrays to arrays and pointers with arrays.pptx
 
Pointers
PointersPointers
Pointers
 
pointer, structure ,union and intro to file handling
pointer, structure ,union and intro to file handlingpointer, structure ,union and intro to file handling
pointer, structure ,union and intro to file handling
 
Unit-I Pointer Data structure.pptx
Unit-I Pointer Data structure.pptxUnit-I Pointer Data structure.pptx
Unit-I Pointer Data structure.pptx
 
Lect 9(pointers) Zaheer Abbas
Lect 9(pointers) Zaheer AbbasLect 9(pointers) Zaheer Abbas
Lect 9(pointers) Zaheer Abbas
 
Btech 1 pic u-5 pointer, structure ,union and intro to file handling
Btech 1 pic u-5 pointer, structure ,union and intro to file handlingBtech 1 pic u-5 pointer, structure ,union and intro to file handling
Btech 1 pic u-5 pointer, structure ,union and intro to file handling
 
pointer, structure ,union and intro to file handling
pointer, structure ,union and intro to file handlingpointer, structure ,union and intro to file handling
pointer, structure ,union and intro to file handling
 
46630497 fun-pointer-1
46630497 fun-pointer-146630497 fun-pointer-1
46630497 fun-pointer-1
 

Mais de patcha535

Chapter 14.2
Chapter 14.2Chapter 14.2
Chapter 14.2patcha535
 
Chapter 14.1
Chapter 14.1Chapter 14.1
Chapter 14.1patcha535
 
Chapter 13.2 (homework)
Chapter 13.2 (homework)Chapter 13.2 (homework)
Chapter 13.2 (homework)patcha535
 
Chapter 13.2
Chapter 13.2Chapter 13.2
Chapter 13.2patcha535
 
Chapter 13.1.10
Chapter 13.1.10Chapter 13.1.10
Chapter 13.1.10patcha535
 
Chapter 13.1.9
Chapter 13.1.9Chapter 13.1.9
Chapter 13.1.9patcha535
 
Chapter 13.1.7
Chapter 13.1.7Chapter 13.1.7
Chapter 13.1.7patcha535
 
Chapter 13.1.3
Chapter 13.1.3Chapter 13.1.3
Chapter 13.1.3patcha535
 
Chapter 13.1.2
Chapter 13.1.2Chapter 13.1.2
Chapter 13.1.2patcha535
 
Chapter 13.1.1
Chapter 13.1.1Chapter 13.1.1
Chapter 13.1.1patcha535
 
Chapter 13.1
Chapter 13.1Chapter 13.1
Chapter 13.1patcha535
 
Chapter 12.3
Chapter 12.3Chapter 12.3
Chapter 12.3patcha535
 
Chapter 12.2
Chapter 12.2Chapter 12.2
Chapter 12.2patcha535
 
Chapter 12.1.2
Chapter 12.1.2Chapter 12.1.2
Chapter 12.1.2patcha535
 
Chapter 12.1.1
Chapter 12.1.1Chapter 12.1.1
Chapter 12.1.1patcha535
 
Chapter 11.2
Chapter 11.2Chapter 11.2
Chapter 11.2patcha535
 
Chapter 11.1
Chapter 11.1Chapter 11.1
Chapter 11.1patcha535
 
Chapter 10.1
Chapter 10.1Chapter 10.1
Chapter 10.1patcha535
 
Chapter 10.1.6
Chapter 10.1.6Chapter 10.1.6
Chapter 10.1.6patcha535
 

Mais de patcha535 (20)

Chapter 14.2
Chapter 14.2Chapter 14.2
Chapter 14.2
 
Chapter 14.1
Chapter 14.1Chapter 14.1
Chapter 14.1
 
Chapter 13.2 (homework)
Chapter 13.2 (homework)Chapter 13.2 (homework)
Chapter 13.2 (homework)
 
Chapter 13.2
Chapter 13.2Chapter 13.2
Chapter 13.2
 
Chapter 13.1.10
Chapter 13.1.10Chapter 13.1.10
Chapter 13.1.10
 
Chapter 13.1.9
Chapter 13.1.9Chapter 13.1.9
Chapter 13.1.9
 
Chapter 13.1.7
Chapter 13.1.7Chapter 13.1.7
Chapter 13.1.7
 
Chapter 13.1.3
Chapter 13.1.3Chapter 13.1.3
Chapter 13.1.3
 
Chapter 13.1.2
Chapter 13.1.2Chapter 13.1.2
Chapter 13.1.2
 
Chapter 13.1.1
Chapter 13.1.1Chapter 13.1.1
Chapter 13.1.1
 
Chapter 13.1
Chapter 13.1Chapter 13.1
Chapter 13.1
 
Chapter 12.3
Chapter 12.3Chapter 12.3
Chapter 12.3
 
Chapter 12.2
Chapter 12.2Chapter 12.2
Chapter 12.2
 
Chapter 12.1.2
Chapter 12.1.2Chapter 12.1.2
Chapter 12.1.2
 
Chapter 12.1.1
Chapter 12.1.1Chapter 12.1.1
Chapter 12.1.1
 
Chapter 11.2
Chapter 11.2Chapter 11.2
Chapter 11.2
 
Chapter 11.1
Chapter 11.1Chapter 11.1
Chapter 11.1
 
Chapter 9.1
Chapter 9.1Chapter 9.1
Chapter 9.1
 
Chapter 10.1
Chapter 10.1Chapter 10.1
Chapter 10.1
 
Chapter 10.1.6
Chapter 10.1.6Chapter 10.1.6
Chapter 10.1.6
 

Último

Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...apidays
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?Igalia
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdflior mazor
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 

Último (20)

Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 

Chapter 13.1.8

  • 1. 17 POINTERS 17.1 INTRODUCTION As you know by now, variables are stored in memory. Each memory location has a numeric address, in much the same way that each element of an array has its own subscript. Variable names in C and other high-level languages enable the programmer to refer to memory locations by name, but the compiler must translate these names into addresses. A pointer is a variable that represents the location of a data item, such as a variable or an array element. Pointers are used frequently in C. Pointers can be used to pass information back and forth between a function and its reference point. In particular, pointers provide a way to return multiple data items from a function via function arguments. Pointers also permit references to other functions to be specified as arguments to a given function. This has the effect of passing functions as arguments to the given function. 17.2 OBJECTIVES After going through this lesson you will be in a position to explain address operator define pointer declarations
  • 2. Pointers :: 265 describe pointers and one-dimensional arrays define pointers and multidimensional arrays explain arrays of pointers 17.3 THE ADDRESS OPERATOR Within a computer’s memory, every stored data item occupies one or more contiguous memory cells. The number of memory cells re- quired to store a data item depends on the type of data item. For example, a single character will typically be stored in 1 byte of memory, an integer requires two contiguous bytes. A floating point number may require four contigueous bytes, and a double precision quantity may require eight contiguous bytes. Suppose 'a' is a variable that represents some particular data item. The compiler will automatically assign memory cells for this data item. The data item can be accessed if we know the location of the first memory cell. The address of a’s memory location can be deter- mined by the expression &v, where & is a unary operator called the address operator, that evaluates the address of its operand. Now let us assign the address of 'a' to another variable, Thus pa= &a; This new variable is called a pointer to 'a', since it “points” to the locations where 'a' is stored in memory. However, pa represents a’s address, not its value. Thus, pa is referred to as a pointer variable. Address of a → value of a pa a The data item represented by 'a' ( i.e the data item stored in a’s memory cells) can be accessed by the expression *pa, where * is a unary operator, called the indirection operator, that operates only on a pointer variable. Therefore, *pa and 'a' both represent the same data item (ie the contents of the same memory cells). Further more if we write pa= &a and b = *pa, then 'a' and 'b' will both represents the same value i.e the value of a will indirectly be as- signed to 'b'
  • 3. 266 :: Computer Applications Let us consider an example : # include <stdio.h> main ( ) { int a=3; int b; int *pa; /* to an integer */ int *pb;/*pointer to an integer */ pa=&a;/* assign address of a to pa */ b=*pa;/* assign value of a to b*/ pb=&b;/* assign address of b to pb */ printf (“n% d %d % d %d”, a, &a,pa, *pa); printf (“n% d %d % d %d”, b, &b, pb, *pb); } The output is : 3 F8E F8E 3 3 F8C F8C 3 The unary operators & and * are members of the same precedence group as the other unary operators i.e. -, ++, —, ! , size of and(type). The address operator (&) must act upon operands associated with unique addresses, such as ordinary variables or single array ele- ments. Thus, the address operator cannot act upon arithmetic ex- pression, such as 2*(a+b). The indirection operator(*) can only act upon operands that are pointers. Let us consider an example # include <stdio.h> main() { int i=3,* j;k; /*j is a pointer to integer */ j=&i; /*j points to the location of i*/ k=*j ; /*assign to k the value pointed to by j*/ *j=4 /assign 4 to the location pointed to by j*/ printf(“i=%d, *j=%d, k=%dn,” i, *j, k); } The output is as follows:
  • 4. Pointers :: 267 i=4,*j=4, k=3 17.4 POINTER DECLARATION Pointer variables, like all other variables, must be declared before they may be used in a C program. The interpretation of a pointer declaration is somewhat different than the interpretation of other variable declarations. When a pointer variable is declared, the variable name must be preceded by an asterisk(*). This identifies the fact that the variable is a pointer. The data type that appears in the declaration refers to the object of the pointer, i.e the data item that is stored in the address represented by the pointer, rather than the pointer itself. Thus, a pointer declaration may be written in general terms as datatype *ptr; Where ptr is the name of the pointer variable and data-type refers to the data type of the pointer’s object. For example, float a,b; float *pb; The first line declares a and b to be floating-point variables. The second line declares pb to be a pointer variable whose object is a floating-point quantity i.e. 'pb' point to a floating point quantity. 'pb' represents an address, not a floating-point quantity. Within a variable declaration, a pointer variable can be initialized by assigning it the address of another variable. 17.5 POINTERS AS ARGUMENTS Pointers are often passed to a function as arguments. This allows data items within the calling portion of the program to be accessed by the function, altered within the function, and then returned to the calling portion of the program in altered form. When an argument is passed by value, the data item is copied to the function. Thus any alteration made to the data item within the func- tion is not carried over into the calling routine when an argument is passed by reference, however the address of a data item is passed to the function. The contents of that address can be accessed freely,
  • 5. 268 :: Computer Applications either within the function or within the calling routine. Moreover, any change that is made to the data item will be recognized in both the function and the calling routine. Thus, the use of a pointer as a function argument permits the corresponding data item to be al- tered globally from within the function. If formal arguments are pointers, then each must be preceded by an asterisk. Also, if a function declaration is included in the calling portion of the program, the data type of each argument that corre- sponds to a pointer must be followed by an asterisk. Let us consider an example of passing by reference #include <stdio.h> main () { int i,j; i=2; j=5; printf(“i=%d and j=%dn”, i,j); /* Now exchange them */ swap(&i,&j); printf(“nnow i=%d and j=%dn”, i,j); } swap(i,j) int *i,*j; { int temp=*i; /* create temp and store into it the value pointed to by “i”*/ *i=*j; /*The value pointed to by j is stored in the location pointed to by i*/ *j=temp;/* Assign temp to the location pointed to by j*/ } The output is as follows: i=2 and j=5 Now i=5 and j=2 If the formal parameters i and j of the swap function were declared merely as integers, and the main function passed only i and j rather
  • 6. Pointers :: 269 than their addresses, the exchange made in swap would have no effect on the variables i and j in main. The variable temp in swap function is of type int, not int*. The values being exchanged are not the pointers, but the integers being pointed to by them. Also temp is initialized immediately upon declaration to the value pointed to by i. Let us consider it again with the help of another example:- The following program counts the no. of vowels and consonants in a line of text with the help of pointers. # include <stdio.h> main() { char str[80]; int vowels=0; int consonants=0; void scan_line(char str[ ], int *v, int *c); printf(“Enter a line of textn”); scanf(“%[ “n]” , str); scan_line(str, &vowels, &consonants); printf(“No. of vowels %d”,vowels); printf(“No. of consonants %d”, consonants); } void scan_line(char str[ ], int * v, int *c) { char c; int count=0; while ((c=toupper(str[count]))!=’0’) { if(c = = A !! c= =E !! c= =I !! c= =O !! c= =U) ++*v; else if(c>=’A’&& c<=’Z’) ++*c; ++ count; }
  • 7. 270 :: Computer Applications return; } It is possible to pass a portion of an array, rather than an entire array, to a function. To do so, the address of the first array element to be passed must be specified as an argument. The remainder of the array, starting with the specified array element, will then be passed to the function. INTEXT QUESTIONS 1. What numeric value is associated with every memory location ? 2. How are variable names translated to their corresponding ad- dresses? 3. What must be done to a pointer variable before it can be put to use? 4. What is the role played by the & operator in a call to the scanf function ? 5. Can addresses be stored ? If so, where ? 17.6 POINTERS AND ONE MIDEMNSIONAL ARRAYS Array name is really a pointer to the first element in that array. Therefore, if x is a one-dimensional array, then the address of the first array element can be expressed as either &x[0] or x. Similarly, the address of the second array element can be written as either & x [1] or as (x+1) and so on. Here we should keep it in mind that the expression (x+1) is a symbolic representation for an address specifi- cation rather than an arithmetic expression. When writing the address of an array element in the form(x+i), there is no need to concern with the number of memory cells associated with each type of array element, the C compiler adjusts for this automatically. The programmer must specify only the address of the first array element and the number of array elements beyond the first. Since &x[i] and (x+i) both represent the address of the ith element of x then x [i] and *(x+i) both represent the contents of that address. The two terms are interchangeble. When assigning a value to an array element such as x[i] the left side of the assignment statement may be written as either x[i]or *(x+i).
  • 8. Pointers :: 271 Thus a value may be assigned directly to an array element, or it may be assigned to the memory area whose address is that of the array element . Thus expression such as x,(x+i) and &x [i] cannot appear on the left side of an assignment statement. Numerical array elements cannot be assigned initial values if the array is defined as a pointer variable. Therefore a conventional array definition is required if initial values will be assigned to the ele- ments of a numerical array. Let us assume that x is to be defined as a one-adimentional, 10 element array of integers. It is possible to define x as a pointer variable rather than as an array. Thus we can write int *x; instead of int x[10]; However x is not automatically assigned a memory block when it is defined as a pointer variable, To assign sufficient memory for x ,we can make use of the library function malloc as follows : x= malloc (10*size of (int)); This function reserves a block of memory whose size is equivalent to the size of an integer quantity. The function return a pointer to a character. If the declaration is to include the assignment of initial values, then x must be defined as an array rather then as a pointer variable for example int x[10]= {1,2,3,4,5,6,7,8,9,10}; or int x[]= {1,2,3,4,5,6,7,8,9,10}; For character arrays you can write them in the form of pointer as char*x="this is string"; 17.7 ARITHMETICS ON POINTERS An integer value can be added to or subtracted from a pointer vari- able. For example, px is a pointer variable representing the address of some variable x. We can write expressions such as a ++ px ,- - px ( px +3 ),( px+i ) and (px – i ) where i is an integer variable. Each expression will represent an address located some distance from the original address represented by px. The exact distance will be the product of the integer quantity and the number. of bytes or words associated with the data item to which px points. One pointer variable can be subtracted from another provided both variables points to elements of the same array. The resulting value indicates the number of words or bytes separating the corresponding array elements.
  • 9. 272 :: Computer Applications Pointer variables can be compared provided both variables point to objects of the same data type. Such comparisons can be useful when both pointer variables point to elements of the same array. The fol- lowing points must be kept in mind about operations on pointers:- – A pointer variable can be assigned the address of an ordinary variable. – A pointer variable can be assigned the value of another pointer variable provided both pointers point to objects of the same data type. – An integer quantity can be added to or subtracted from a pointer variable. – A pointer variable can be assigned a null (zero) value. – One pointer variable can be subtracted from another provided both pointers point to elements of the same array. – Two pointer variables can be compared provided both pointers point to objects of the same data type. 17.8 POINTERS AND MULTIDIMENSIONAL ARRAYS A two dimensional array, is actually a collection of one dimensional arrays. Therefore, we can define a two dimensional array as a pointer to a group of contiguous one-dimensional arrays. A two dimensional array declaration can be written as data type (*ptr) [expression2]; Notice the parentheses that surround the array name and the pre- ceding asterisk in the pointer version of each declaration. These parentheses must be present. Without them we would be defining an array of pointers rather than a pointer to a group of arrays, since these particulars symbols (i.e. The square brackets and asterisk) would normally be evaluated right-to-by. For example, if x is a two dimensional integer array having 10 rows and 20 columns, then we can declare x as int(*x)[20]; rather than int x(10) (20);
  • 10. Pointers :: 273 Similarly, three dimmensional integer array can be written as int (*x) (20) (30) An individual array element within a multi-dimensional array can be accessed by repeatedly using the indirection operator. If n is a 2D array having 10 rows and 20 columns, then item in row 2, column 5 can be accessed by writing either x[2][5] or *(*(x+2)+5) Here, (x+2) is a pointer to row 2. Therefore, the object of this pointer *(x+2), refers to the entire row. Since row 2 is a one-dimensional array, *(x+2) is actually a pointer to the first element in row 2. We now add 5 to this pointer. Hence,(*(x+2)x5) is a pointer to element 5 in row 2. The object of this pointer, (*(x+2)+5) therefore refers to the item in column 5 of row2 which is x[2][5]. INTEXT QUESTIONS 6. What is meant by passing by reference ? 7. Why is only the address of an array’s first element necessary in order to access the entire array ? 8. If an array is declared as char x[10][12]; What is referred to by x[5] ? 17.9 ARRAYS OF POINTERS A multi-dimensional array can be expressed in terms of an array of pointers rather than as a pointer to a group of contiguous arrays. In such cases the newly defined array will have one less dimension than the original multi-dimensional array. Each pointer will indi- cate the beginning of a separate (n-1) dimensional array. In general terms, a 2D array can be defined as a one dimensional array of pointers by writing.
  • 11. 274 :: Computer Applications data type *array [expression 1]; In this type of declaration, array name and its preceding asterisk are not enclosed in parentheses. Thus, a right-to-left rule first asso- ciates the pairs of square brackets with array, defining the named object as an array. The preceding asterisk then establishes that the array will contain pointers. For example x is a 2D integer array having 10 rows and 20 columns. We can define x as a one-dimensional array of pointers by writing int *x[10]; An individual array element, such as x[2][5], can be accessed by writing *(x[2]+5) In this expression, x[2] is a pointer to the first element in row 2, so that (x[2] +5) points to element 5 within row 2. The object of this pointer, *(x[2]+5), therefore refers to x[2][5]. Pointer arrays offer a particularly convenient method for storing strings. In this situation, each array element is a character-type pointer that indicates the beginning of a separate string. Each indi- vidual string can be accessed by referring to its corresponding pointer. Let us consider an example of array of pointers: (To sort list of strings) #include<stdio.h> #include<stdlib.h> main() { int i, n=0; char *x[10]; int reorder(int n, char *x[]); printf(“Enter each string on a separate line,) "Type'END' to finish”); do { x[n]=malloc(12*size of (char)); printf(“nstring %d”, n+1); scanf(“%s”, x[n]);
  • 12. Pointers :: 275 } while ( stringcmp(x[n++], “END”)); reorder(- - n,x); printf (or nn Recordered List:n"); for(i=0; i<n; ++i) printf(“n string %d:%s”, i+1, x[i]); } reorder(int n, char * x[]) { char *temp; int i, item; for(item=0; item <n-1; ++ item) for(i=item +1; i<n; ++i) if (stringcmp(x[item], x[i]>0) { temp=x[item]; x[item]=x[i]; x[i]=temp; } return; } An advantage to use arrays of pointers is that a fixed block of memory need not be reserved in advance, as is done when initializing a con- ventional array. If some of the strings are particularly long, there is no need to worry about the possibility of exceeding some maximum specified string length. Arrays of this type are oftern referred to as ragged arrays. 17.10 PASSING FUNCTIONS TO OTHER FUNCTIONS When a function declartion appears within another function, the name of the function being declared becomes a pointer to that function. Such pointer can be passed to other functions as arguments. This has the effect of passing one function to another , as though the first function was a variable. The first functiion can then be accessed within the second function. Successive calls to the second function can pas different pointers to the second funtion.
  • 13. 276 :: Computer Applications When a function accepts another function’s name as an argument a formal argument declaration must identify that argument as a pointer to another function. A formal argument that is a pointer to a function can be declared as data-type (*function name)(); Where data-type refers to the data type of the quantity returned by the function. This function can then be accessed by means of the indirection operator. To do so the indirection operator must precede the func- tion name. Both the indirection operator and the function name must be enclosed in parentheses that is (*function-name)(argument 1, argument 2…, argument n); In the last, we mention that pointer declaration can become complicated and some care is required for its interpretation. This is particularly take in case of declarations that involve functions or arrays. One difficulty is the dusl use of parentheses. In particular, parentheses are used to indicate functions and they are used for nesting purposes within more complicated declarations. Thus the declaration int *p(int a); Indicates a function that accepts an integer argument, and returns a pointer to an integer. On the other hand, the declaration. int(*p)(int a); indicates a pointer to a function that accepts an integer argument and returns an integer. In this last declaration, the first pair of pa- rentheses is used for nesting and the second pair is used to indicate a function. 17.11 WHAT YOU HAVE LEARNT In this lesson you have learnt about pointers. You can now declare pointers very effciently. Now you can pass pointers to a function. You can do operations on pointer. Now you are familiar with arrays of pointers. You can use pointers with one as well as multi dimen- sional arrays.
  • 14. Pointers :: 277 17.12 TERMINAL QUESTIONS 1. What is meant by the address of a memory cell? 2. What kind of information does a pointer variable represent ? 3. How is a pointer variable declared ? 4. How can a function return a pointer to its calling routine ? 5. How is a multidimensional array defined in terms of a pointer to a collection of contiguous arrays of lower dimensioanlity ? 6. A ‘C’ program contains the following declaration : Static int x[8]= {10,20,30,40,50,60,70,80}; (a) What is the meaning of x? (b) What is the meaning of (x+2) ? (c) What is the value of *x? (d) What is the value of (*x+2) ? (e) What is the value of *(x+2) ? 7. Write a program to find the length of a string using the concept of pointers 8. Write a program to copy a string using pointers. 9. Write a program to concatenate two strings using pointers. 10. Write a program to compare two strings using pointers. 17.13 KEY TO IN-TEXT QUESTIONS 1. its address 2. with the & operator 3. After it has been declared, it must be initialized 4. It passes the address of the variable being input, making it pos- sible for the contents of that location to be changed.
  • 15. 278 :: Computer Applications 5. Addresses can be stored in pointer variables. 6. Passing by reference is the term used to refer to the passing of a variable’s address to a function. 7. Since all the elements of an array are of the same type, and all the elements are stored continguously in memory, the location of the first element can be used to find the second element, the third element, and so forth. 8. x[5] is a pointer to the sixth row (row #5) of the array.