3. POINTERS
A POINTER IS A VARIABLE WHICH CONTAINS
ADDRESS (IN MEMORY) OF ANOTHER VARIABLE.
POINTERS ARE SYMBOLIC REPRESENTATION OF
ADDRESS.
WE CAN HAVE A POINTER TO ANY VARIABLE TYPE.
IN OTHER WORDS , WE CAN TALK ABOUT ITS
ADDRESS RATHER THAN ITS VALUE.
4. ARRAYS
AN ARRAY IS COLLECTION OF DATA ITEMS
THOSE ARE OF SAME TYPES.
AN ARRAY SIZE IS FIXED. IT CAN NOT BE
CHANGED AFTER DECLARATION.
THE ORDER OF THE ELEMENTS IS ALSO FIXED.
EXAMPLE: A LIST OF TELEPHONE NUMBERS
EXPRESSION a[4] REFERS TO THE 5TH
ELEMENT OF
ARRAY a
5. POINTERS AND ARRAYS
AN ARRAY NAME IS BASICALLY A CONST POINTER.
YOU CAN USE THE [] OPERATOR WITH A POINTER;
int *x;
int a[10];
x = &a[2] ;
x is “the address of a[2]”
6. POINTERS AND ARRAYS
FOR EXAMPLE :- int rollno[4]={100,101,102,103};
HERE BASE ADDRESS IS 5000, THEN FOUR ELEMENTS
ARE STORED AS FOLLOWS:
Array
Element
rollno[0] rollno[1] rollno[2] rollno[3]
Value 100 101 102 103
Address 5000 5002 5004 5006
IF WE WRITE &rollno[0] , IT REFERS TO THE
ADDRESS OF AN ARRAY rollno.
7. POINTERS AND ARRAYS
IF WE DEFINE int*p , THEN TO ASSIGN ADDRESS
OF THE ARRAY,
WE CAN WRITE :-
p=rollno OR p=rollno[0];
Pointer Value Array Element
Address
Actual Value
p &rollno[0] 5000
p++ or p+1 &rollno[1] 5002
p+2 &rollno[2] 5004
p+3 &rollno[3] 5006
8. #include <stdio.h>
int main ()
{
double balance[5] = {1000.0, 2.0, 3.4, 17.0, 50.0};
double *p;
int i;
p = balance;
printf( "Array values using pointern");
for ( i = 0; i < 5; i++ )
{printf("*(p + %d) : %fn", i, *(p + i) ); }
printf( "Array values using balance as addressn");
for ( i = 0; i < 5; i++ ) {
printf("*(balance + %d) : %fn", i, *(balance + i) );
}
return 0;
}
9. When the above code is compiled and
executed, it produces the following result −
Array values using pointer
*(p + 0) : 1000.000000
*(p + 1) : 2.000000
*(p + 2) : 3.400000
*(p + 3) : 17.000000
*(p + 4) : 50.000000
Array values using balance as address
*(balance + 0) : 1000.000000
*(balance + 1) : 2.000000
*(balance + 2) : 3.400000
*(balance + 3) : 17.000000
*(balance + 4) : 50.000000
10. ARRAYS OF POINTERS
POINTERS CAN BE USED TO HANDLE TABLE OF
STRINGS.
WE CAN USE POINTER TO A STRING FOR
FOLLOWING REASONS :-
1.ALL NAMES ARE ALMOSTLY NOT OF EQUAL
LENGTH SO POINTER CAN BE USED FOR
VARYING LENGTH.
2.MAKING FIXED SIZE ROW WASTES MEMORY.
11. name[0] R A J 0
name[1] R A M K R I S H N A 0
HERE WE NEED ONLY 15 BYTES WITH POINTER
ALLOCATION INSTEAD OF 40 BYTES WITH FIXED
ALLOCATION.