Pointer Expressions
Like other variables pointer variables can be used in
expressions.
1) If p1 and p2 are properly declared and
initialized pointers, then the following statements are valid:
Y=*p1**p2;
Sum=sum+*p1;
Z=5*-*p2/ *p1;
*p2=*p2+10;
*p1=*p1+*p2;
*p1=*p2-*p1;
NOTE:
in the third statement there is a blank space between ‘/’ and *
because the symbol /*is considered as beginning of the comment
and therefore the statement fails.
2) if p1 and p2 are properly declared and initialized pointers
then, ‘C’ allows adding integers to a pointer variable.
EX:
int a=5, b=10;
int *p1,*p2;
p1=&a;
p2=&b;
Now,
P1=p1+1=1000+2=1002;
P1=p1+2=1000+ (2*2) =1004;
P1=p1+4=1000+ (2*4) =1008;
P2=p2+2=3000+ (2*2) =3004;
P2=p2+6=3000+ (2*6) =3012;
Here addition means bytes that
pointer data type hold are subtracted number of times that is
subtracted to the pointer variable.
3) If p1 & p2 are properly declared and initialized,
pointers then
‘C’ allows to subtract integers from pointers.
From the above example,
P1=p1-1=1000-2=998;
P1=p1-2=1000-4=996;
P1=p1-4=1000-8=992;
P2=p2-2=3000-4=2996;
P2=p2-6=3000-12=2988;
Here the
subtraction means byte that pointer data type hold are
subtracted number of times that is subtracted to the pointer
variable.
4) If p1 & p2 are properly declared and initialize pointers,
and both points to the elements of same type. “Subtraction of
one pointer from another pointer is also possible".
NOTE:
this operation is done when the both pointer variable points to
the elements of the same array.
EX:
P2- P1 (It gives
the number of elements between p1 and p2)
5) Pointer
can also be used with increment and decrement operators.
Ex:
int a=10;
int *b;
b=&a;
EXAMPLE
PROGRAM:
Write a function to calculate the
roots. The function must use two pointer parameters, one to
receive the coefficients a, b and c and the other to send roots
to calling function.
#include<stdio.h>
#include<math.h>
Roots (p, q)
float *p,*q;
{
*q= (–(*(p+1) +sqrt ((*(p+1))*(*(p+1))–4*(*p)*(*(p+2))))/
(2*(*p));
*(q+1) = (–(*(p+1)-sqrt ((*(p+1))*(*(p+1))–4*(*p)*(*(p+2))))/
(2*(*p));
}
void main ()
{
float A [3], R [2];
int i;
printf (‘‘Enter values for a, b, c’’);
for (i=0; i< = 2; i++)
scanf (‘‘%f’’, A+i);
Roots (A, R);
printf (‘‘root1 = %f’’, *(R+0));
printf (‘‘root2=%f’’, *(R+1));
}
Write a ‘C’ program to compute the sum of all elements stored
in an array Using pointers.
/*program to compute sum of all elements stored in an
array */
#include<stdio.h>
#include<conio.h>
main ()
{
int a [10], I, sum=0,*p;
printf (“enter 10 elements \n”);
for (i=0; i<10; i++)
scanf (“%d”, & a[i]);
p = a;
for (i = 0; i<10; i++)
{
sum = sum*p;
p++;
}
printf (“the sum is % d”, sum);
getch ();
}
Write a ‘C’ program using pointers to determine the length of
a character String.
/*program to find the length of a char string */
#include<stdio.h>
#include<conio.h>
#include<string.h>
main ()
{
Char str [20].*p;
Int l=0;
printf (“enter a string \n”);
scanf (“ % s”, str);
p=str;
while(*p!=’\0’)
{
l++;
p++;
}
printf (“the length of the given string is %d”, l);
getch ();
}