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 ();
 }