2. POINTERS
What is a pointer ?
A pointer is nothing but a variable that contains
the address which is a location of the another variable in
memory.
Benefits of using the pointer :
1.A pointer enables us to access a variable that is
defined outside the function.
2.Pointer are more efficient in handling data table.
3.Pointer reduces the length and complexity of the
program.
4.The use of pointer array to character string results in
saving of data storage space in memory.
3. Declaring and initializing pointers :
syntax :
data_type *pt_name ;
This tells the compiler three things about the
variable pt_name.
1. * tells the compiler that the variable
pt_name is a pointer variable.
2. pt_name needs a memory location.
3. pt_name points to a variable of type
data_type.
4. •Ex: int quantity=179 ;
int *p;
p=&quantity;
quantity variable
179 value
5000 Address
p=&quantity;
Note : you can know the address of variable
using %u format specification.
You can’t assign an absolute address to a
pointer variable directly.
Ex: p = 5000; It is not possible
5. Accessing variables using pointers.
void main()
{ int x,y, *ptr;
x=10;
ptr=&x;
y = *ptr;
printf(“Value of x is %dnn”,x);
printf(“%d is stored at address %un”, x, &x);
printf(“%d is stored at address %un”, *&x, &x);
printf(“%d is stored at address %un”, *ptr, &x);
printf(“%d is stored at address %un”, y, &*ptr);
printf(“%d is stored at address %un”,ptr,&ptr);
printf(“%d is stored at address %un”, y, &y);
*ptr=25;
printf(“n Now x = %dn”,x)
}
Output:
Value of X is 10
10 is stored at address
4104
10 is stored at address
4104
10 is stored at address
4104
10 is stored at address
4104
4104 is stored at address
4106
10 is stored at address
4108
Now x = 25
6. •Pointers expression :
void main()
{
int a,b,*p1,*p2, x, y, z ;
a =12; b = 4;
p1=&a; p2 = &b;
x = *p1 * *p2 – 6;
printf(“Address of a = %un”,p1);
printf(“Address of b=%un”,p2);
printf(“n”);
printf(“a=%d, b=%dn”,a , b);
printf(“x=%d n”,x);
7. *p2 = *p2 + 3 ;
*p1 = *p2 – 5 ;
y = *p1 + *p2;
z= *p1 * *p2 – 6 ;
printf(n a = %d , b = %d “, a ,b);
printf(“z = %dn”, z);
}
Out put :-
Address of a = 4020
Address of b =4016
a = 12 b=4
x=42 y=9
a=2 b=7 z=8
8. Pointer increments and scale factor :
p1++ will cause the pointer p1 points to the
next value of its type.
Ex :- if p1 is an integer pointer with the initial
value say 2800,then after the operations
p1=p1+1,the value of p1 will be 2802,not 2801
when we increment pointer its value is
increased by the length of the data type that it
points to. This length is called scale factor.
9. Pointer and Arrays :-
When an array is declared, the compiler allocates a
base
Address and sufficient amount of storage to contains
all
The elements of the array in memory location.
Base address is the location of the first element of the
array
int x[5] = {1,2,3,4,5}
Element x[0] x[1] x[2] x[3] x[4]
Value 1 2 3 4 5
Address 1000 1002 1004 1006 1008
So, base address is,
x = &x[0] = 1000
10. If we declare p as integer pointer, then we can
make the pointer p to point to the array x by the
following statements.
p = x or p = &x[0]
Now we can access every element of x using
p++ to move from one element to another.
p = &x[0] (=1000)
p+1 = &x[1] (=1002)
p+2 = &x[2] (=1004)
p+3 = &x[3] (=1006)
p+4 = &x[4] (=1008)
11. /*Program of sum n array elements*/
#include<stdio.h>
main()
{
int x[10],i,*p,n,sum=0;
printf("enter the N:");
scanf("%d",&n);
printf("enter the the data:n");
for(i=0;i<n;i++)
scanf("%d",&x[i]);
p = x;
12. /*Program of sum n array elements*/
for(i=0;i<n;i++)
{
printf("n%d",*p);
sum=sum + *p;
p++;
}
printf("nsum=%d",sum);
}
OUTPUT
Enter the N: 5
Enter the data :
1 2 3 4 5
Sum=15
13. 2,0 2,3
P
P +
1
0 1 2 3 4
0
1
2
3
*(p+2)
p+2
p = pointer to first row
p+i = pointer to ith row
*(p+i) = pointer to first element in the ith row
*(p+i)+j = pointer to jth elements
*(*(p+i)+j)=value stored in the cell(i,j)
*(p+2) + 3
Array using pointer
notation
14. /* Program of sum of n array elements*/
#include<stdio.h>
void main()
{
int x[10][10],i,j,n,sum=0;
clrscr();
printf("enter the N:");
scanf("%d",&n);
printf("enter the the data:n");
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&x[i][j]);
16. Pointer and character string :-
In c, a constant character string always
represents a pointer to that string. And therefore
you can directly write char *name;
name = “DELHI”
But remember that this type of
assignment does not apply on character
arrays.
char name[20];
name = “DELHI”
17. char *name[3] = {“New
Zealand”,“Australia”,“India”}
Where name to be an array of three pointers
to a character, each pointer points to a particular
name.
name[0]=“New Zealand”,
name[1]=“Australia”,
name[2]=“India”
This declaration allocates only 28 bytes.
The character arrays with the rows of varying
length are called ragged array.
18. /****PROGRAMM FOR STRING PRINT USING
POINTER ****/
#include<stdio.h>
void main()
{
char name[10],*ptr;
clrscr();
printf("enter the name => ");
scanf("%s",name);
ptr=name;
printf("n");