This document discusses pointers in the C programming language. It begins by listing the chapter objectives, which are to understand pointers, arrays and pointers, pointer arithmetic, dynamic memory allocation, pointers to arrays, arrays of pointers, pointers to functions, and arrays of pointers to functions. It then provides examples and explanations of pointers, pointer declarations, the relationship between arrays and pointers, pointer arithmetic, dynamic memory allocation functions like malloc(), calloc(), free(), and realloc(), pointers to arrays, arrays of pointers, pointers to functions, and arrays of pointers to functions.
Model Call Girl in Bikash Puri Delhi reach out to us at 🔝9953056974🔝
Pointers in C and Dynamic Memory Allocation
1. PAPER: INTRODUCTION PROGRAMMING LANGUAGE USING C
PAPER ID: 20105
PAPER CODE: BCA 105
DR. VARUN TIWARI
(ASSOCIATE PROFESSOR)
(DEPARTMENT OF COMPUTER SCIENCE)
BOSCO TECHNICAL TRAINING SOCIETY,
DON BOSCO TECHNICAL SCHOOL, OKHLA ROAD , NEW DELHI
3. OBJECTIVES
IN THIS CHAPTER YOU WILL LEARN:
1. TO UNDERSTAND POINTERS IN C.
2. TO LEARN ABOUT ARRAY & POINTER RELATIONSHIP.
3. TO LEARN ABOUT POINTER ARITHMETIC.
4. TO LEARN ABOUT DYNAMIC MEMORY ALLOCATION.
5. TO LEARN ABOUT POINTER TO ARRAYS.
6. TO LEARN ABOUT ARRAY OF POINTERS.
7. TO LEARN ABOUT POINTERS TO FUNCTIONS.
8. TO LEARN ABOUT ARRAY OF POINTERS TO FUNCTIONS.
4. POINTERS: POINTER IS VERY POWERFUL TOOL IN C LANGUAGE.POINTER ARE USED FREQUENTLY IN C.
POINTERS(THEY) HAVE A NUMBER OF USEFUL APPLICATION. POINTER VARIABLE HOLD THE ADDRESS WHILE
THE ARRAY VARIABLE CODES THE VALUE. IT IS A VARIBALE THAT STORES ADDRESS OF ANOTHER VARIBALE. IT
POINT TO THE NEXT/PREVIOUS MEMORY LOCATION. THE MAIN MOTIVE USE OF POINTER IS TO SAVE
MEMORY SPACE AND ACHIEVE FASTER EXECUTION TIME.THE DECLARATION TELLS THE C COMPILER TO:
1. RESERVE SPACE IN MEMORY TO HOLD THE INTEGER VALUE
2. ASSOCIATE THE NAME K WITH THIS MEMORY LOCATION.
3. STORE THE VALUE 56 IN THIS LOCATION.
5. DECLARATION OF POINTERS:
SYN: DATA TYPE (POINTER SYMBOL)* VARIABLE NAME;
EXAMPLE 1:
void main() {
int a;
Int *b; //declaration of pointer
a=10;
b=&a;
printf("%u",b); // print address of b
printf("%u",&a); // print the address of a
printf("%d",a); // print the value of a
printf("%d",*b); // print the value of b }
6. EXAMPLE 2:
#include<stdio.h>
#include<conio.h>
void main() {
int a; int *b, **c; //declaration of pointer
clrscr();
a=10; b=&a; c=&b;
printf("n %u",&a); // print the address of a
printf("n %u",b); // print the address of b
printf("n %u",*c); // print the address of c
printf("n %u",&b); // print the address of b
printf("n %u",c); // print the address of c
printf("n %d",a); // print the value of a
printf("n %d",*b); // print the value of b
printf("n %d",**c); // print the value of c
getch(); }
7.
8.
9. ARRAY & POINTER RELATIONSHIP:
BOTH ARE CLOSELY RELATED EACH OTHER. AN ARRAY NAME CAN BE THOUGHT OF AS A CONSTANT POINTER. THEY CAN BE USED TO
DO ANY OPERATION INVOLVING ARRAY SUBSCRIPTING.
DECLARATION OF ARRAY & POINTER:
int a[4]; // CREATE AN ARRAY (SIZE IS 4)
int *p; // CREATE P AS A POINTER TYPE VARIABLE
p=a; //PASSING ARRAY IN POINTER TYPE VARIABLE
HERE THE ARRAY NAME A (WITHOUT A SUBSCRIPT) IS A (CONSTANT) POINTER TO THE FIRST ELEMENT OF THE ARRAY, WE CAN SET P
TO THE ADDRESS OF THE FIRST ELEMENT IN ARRAY A WITH THE STATEMENT
THIS IS EQUIVALENT TO TAKING THE ADDRESS OF THE FIRST ELEMENT OF THE ARRAY AS FOLLOWS:
p = &a[0]; // PASSING ADDRESS OF A[0] TO P
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20. POINTER ARITHMETIC:
A POINTER IN C IS AN ADDRESS, WHICH IS A NUMERIC VALUE. THEREFORE, YOU CAN PERFORM ARITHMETIC
OPERATIONS ON A POINTER JUST AS YOU CAN ON A NUMERIC VALUE. WE CAN PERFORM POINTER ARITHMETIC IN
DIFFERENT WAYS IN C. THERE ARE FOUR ARITHMETIC OPERATORS THAT CAN BE USED ON POINTERS:
• INCREMENT (++)
• DECREMENT (--)
• ADDITION (+)
• SUBTRACTION (-)
FOR 32-BIT INT VARIABLE, IT WILL BE INCREMENTED BY 2 BYTES.
FOR 64-BIT INT VARIABLE, IT WILL BE INCREMENTED BY 4 BYTES.
21.
22.
23. DYNAMIC MEMORY ALLOCATION:
C DYNAMIC MEMORY ALLOCATION CAN BE DEFINED AS A PROCEDURE IN WHICH THE SIZE OF A DATA
STRUCTURE (LIKE ARRAY) IS CHANGED DURING RUNTIME.
THERE ARE 4 LIBRARY FUNCTIONS PROVIDED BY C DEFINED UNDER <STDLIB.H> HEADER FILE TO FACILAITE
DYNAMIC MEMORY ALLOCATION IN C PROGRAMMING:
1. MALLOC ()
2. CALLOC ()
3. FREE()
4. REALLOC()
24. C MALLOC()
MALLOC() FUNCTION IS USED TO DYNAMICALLY ALLOCATE A SINGLE LARGE BLOCK OF
MWMORY WITH THE SPECIFIED SIZE. IT RETURNS A POINTER OF TYPE VOID WHICH CAN
BE CAST INTO A POINTER OF ANY FORM. IT INITIALIZED EACH BLOCK WITH DEFAULT
GARBAGE VALUE.
SYNTAX:
PTR=(CAST-TYPE *) MALLOC (BYTE-SIZE)
EXAMPLE:
PTR =(INT *) MALLOC (20*SIZEOF(INT));
(HERE THE SIZE OF INT IS 2 BYTES,THIS STATEMENT WILL ALLOCATE 40 BYTES OF MEMORY.
AND THE POINTER PTR HOLDS THE ADDRESS OF THE FIRST BYTE IN THE ALLOCATED MEMORY.
27. C CALLOC()
“CALLOC” OR “CONTIGUOUS ALLOCATION” METHOD IN C IS USED TO DYNAMICALLY
ALLOCATE THE SPECIFIED NUMBER OF BLOCKS OF MEMORY OF THE SPECIFIED TYPE. IT
INITIALIZES EACH BLOCK WITH A DEFAULT VALUE ‘0’.
SYNTAX:
P = (int*)calloc(n, Element Size);
EXAMPLE:
PTR = (INT*) CALLOC(10, SIZEOF(FLOAT));
(HERE THE SIZE OF INT IS 2 BYTES, THIS STATEMENT WILL ALLOCATE 20 BYTES OF MEMORY.
AND THE POINTER PTR HOLDS THE ADDRESS OF THE FIRST BYTE IN THE ALLOCATED MEMORY.
28.
29.
30. C REALLOC()
“REALLOC()” FUNCTION IS USED TO REALLOCATE A MEMORY
DYNAMICALLY WHICH HAVE ALREADY CREATED BY MALLOC () AND
CALLOC() FUNCTION.
SYNTAX:
P = (int*) realloc(pointer variable, New size);
EXAMPLE:
P = (INT*) REALLOC(P, 7);
31.
32.
33. FREE()
“FREE()” FUNCTION IS USED TO RELEASE MEMORY WHICH IS CREATED BY
MALLOC(), CALLOC() AND REALLOC() FUNCTION.
SYNTAX:
Free(pointer variable);
EXAMPLE:
FREE(P);