Module 3 - Pointers & Dynamic Memory Allocation
Module 3 - Pointers & Dynamic Memory Allocation
What is Pointer?
A normal variable is used to store value.
A pointer is a variable that store address / reference of another variable.
Pointer is derived data type in C language.
A pointer contains the memory address of that variable as their value.
Pointers are also called address variables because they contain the
addresses of other variables.
Declaration & Initialization of Pointer
Outpu
Syntax
t
1 datatype 10 10 5000
*ptr_variablename;
Exampl
e
1 void main()
2 { Variable Value Address
3 int a=10, *p; // assign memory address
4 of a to pointer variable p a 10 5000
5 p = &a;
6 printf("%d %d %d", a, *p, p); p 5048
7 }
5000
Outpu
t
Value of var = 3000
Value available at *ptr = 3000
Value available at **pptr = 3000
Exampl
e
1 int *ptr[5]; //declares an array of integer pointer of size 5
Array of Pointer – Cont.
An array of pointers ptr can be used to point to different rows of matrix
as follow:
Exampl
e
1 for(i=0; i<5; i++)
2 {
3 ptr[i]=&mat[i][0];
4 }
ptr 0 1 2
ptr[0]
ptr[1]
ptr[2]
ptr[3]
ptr[4]
Write a program to swap value of two variables using pointer / call by reference.
Output
25
calloc() function
calloc() is used to allocate a block of memory during the execution of
a program
calloc() allocates a region of memory to hold no_of_blocks of
size_of_block each, if the allocation succeeds then a pointer to the
block of memory is returned else NULL is returned.
The memory is initialized to ZERO.
Syntax Description
ptr_var = (cast_type This statement returns a pointer to no_of_blocks of size
*) calloc size_of_blocks, it returns NULL if the request cannot be
(no_of_blocks, satisfied.
size_of_block);
Example:
int n = 20;
fp = (int *)calloc(n, sizeof(int));
Write a C program to allocate memory using
calloc.
Program
1 #include <stdio.h>
2 void main()
3 {
4 int i, n; //i, n are integer variables
5 int *fp; //fp is a pointer variable
6 printf("Enter how many numbers: ");
7 scanf("%d", &n);
8 fp = (int *)calloc(n, sizeof(int)); //
9 calloc returns a pointer to n blocks
10 for(i = 0; i < n; i++) //loop through until all the blocks are read
11 {
12 scanf("%d",&fp[i]); //read and store into location where fp points
13
14 }
free(fp); //frees the space pointed to by fp
}
realloc() function
realloc() changes the size of the object pointed to by pointer fp to
specified size.
The contents will be unchanged up to the minimum of the old and new
sizes.
If the new size is larger, the new space will be uninitialized.
realloc() returns a pointer to the new space, or NULL if the request
cannot be satisfied, in which case *fp is unchanged.
Syntax Description
ptr_var = (cast_type This statement returns a pointer to new space, or NULL if the
*) realloc (void *fp, request cannot be satisfied.
size_t);
Example: fp = (int *)realloc(fp,sizeof(int)*20);
Write a C program to allocate memory using
realloc.
Program
1 #include <stdio.h>
2 void main()
3 {
4 int *fp; //fp is a file pointer
5 fp = (int *)malloc(sizeof(int)); //
6 malloc returns a pointer to int size storage
7 *fp = 25; //store 25 in the address pointed by fp
8 fp =(int *)realloc(fp, 2*sizeof(int)); //returns a pointer to new space
9 printf("%d", *fp); //print the value of fp
free(fp); //free up the space pointed to by fp
}
Output
25
free() function
free deallocates the space pointed to by fp.
It does nothing if fp is NULL.
fp must be a pointer to space previously allocated by calloc, malloc or
realloc.
Syntax Description
void free(void *); This statement free up the memory not needed anymore.
Example: free(fp);
Write a C program to sort numbers using malloc
Program
Program
(cont.)
1 #include<stdio.h> 17 if(p[i] > p[j])
2 #include<stdlib.h> 18 {
3 void main() 19 t = p[i];
4 { 20 p[i] = p[j];
5 int i,j,t,n; 21 p[j] = t;
6 int *p; 22 }
7 printf("Enter value of n: "); 23 }
8 scanf("%d", &n); 24 }
9 p=(int *) malloc(n * sizeof(int)); 25 printf("Ascending order\n");
10 printf("Enter values\n"); 26 for(i=0; i<n; i++)
11 for(i=0; i<n; i++) 27 printf("%d\n", p[i]);
12 scanf("%d", &p[i]); 28 free(p);
13 for(i=0; i<n; i++) 29 }
14 {
15 for(j= i+1; j<n; j++)
16 {
Write a C program to find square of numbers using calloc
Program Output
1 #include<stdio.h> Enter value of n: 3
2 #include<stdlib.h> Enter values
3 void main() 3
4 { 2
5 int i,n; 5
6 int *p; Square of 3 = 9
7 printf("Enter value of n: "); Square of 2 = 4
8 scanf("%d",&n); Square of 5 = 25
9 p=(int*)calloc(n,sizeof(int));
10 printf("Enter values\n");
11 for(i=0;i<n;i++)
12 scanf("%d",&p[i]);
13 for(i=0;i<n;i++)
14 printf("Square of %d = %d\
15 n", p[i], p[i] * p[i]);
16 free(p);
17 }
Write a C program to add/remove item from a list using
realloc
Program
Program
(cont.)
1 #include<stdio.h> 18
2 #include<stdlib.h> 19 printf("Enter new size of list: ");
3 void main() 20 scanf("%d", &n2);
4 { 21
5 int i, n1, n2; 22 fp = realloc(fp, n2 * sizeof(int));
6 int *fp; 23 if(n2 > n1)
7 printf("Enter size of list: "); 24 {
8 scanf("%d", &n1); 25 printf("Enter %d numbers\
9 fp=(int *) malloc (n1 * sizeof(int)); 26 n", n2 - n1);
10 27 for(i = n1; i < n2; i++)
11 printf("Enter %d numbers\n", n1); 28 scanf("%d", &fp[i]);
12 for(i = 0; i < n1; i++) 29 }
13 scanf("%d", &fp[i]); 30 printf("The numbers in the list are\
14 31 n");
15 printf("The numbers in the list are\n"); 32 for(i = 0; i < n2; i++)
16 for(i = 0; i < n1; i++) printf("%d\n", fp[i]);
17 printf("%d\n", fp[i]); }
Practice Programs
1) Write a C program to calculate sum of n numbers entered by user.
2) Write a C program to input and print text using DMA
3) Write a C program to read and print student details using structure and
DMA