Prepared by
Mohammed Sikander
Technical Lead
Cranes Software International Limited
mohammed.sikander@cranessoftware.com 2
char *ptr_name = “SIKANDER”;
char str_name[ ] = “SIKANDER”;
• Can we make a pointer point to string literal?
mohammed.sikander@cranessoftware.com 3
char *ptr_name = “SIKANDER”;
char str_name[ ] = “SIKANDER”;
printf(“ %s n“ , ptr_name);
printf(“ %s n“ , str_name);
• Can we print the string through pointer.
mohammed.sikander@cranessoftware.com 4
char *ptr_name = “SIKANDER”;
char str_name[ ] = “SIKANDER”;
printf(“Length of %s = %dn“ , ptr_name , strlen(ptr_name));
printf(“Length of %s = %dn“ , str_name , strlen(str_name));
mohammed.sikander@cranessoftware.com 5
char *ptr_name = “SIKANDER”;
char str_name[ ] = “MUQADDAR”;
printf(“Size of ptr_name = %dn“ , sizeof(ptr_name));
printf(“Size of str_name = %dn“ , sizeof(str_name));
mohammed.sikander@cranessoftware.com 6
mohammed.sikander@cranessoftware.com 7
mohammed.sikander@cranessoftware.com 8
We can have arrays where each element
can be a pointer
int *
char **
int *
int *
int *
int *
int *arr_ptr[5];
int
int
int
int
int
int arr[5];
What is size of arr?
What is size of arr_ptr?
char **
Char *arr_ptr[5];
char
*
char *
char *
char *
char *
char
char
char
char
char
Char arr[5];
What is size of arr?
What is size of arr_ptr?
int x = 10;
int *ptr = &x;
int arr[5]
int *ptr = arr;
int a = 10;
int b = 23;
int arr[ ] = {12,34,54};
int *ptr[ ] = {&a , &b , arr};
char *capitalCities[] = { “Bangalore”, “Chennai”,
“Guwahati”, “Amravathi”};
Bangalore
Chennai
Guwahati
Amravathi
*
*
*
*
char *
char *
char *
char *
char *str = “VxWorks”;
mohammed.sikander@cranessoftware.com 13
 names++ tries to change the base address of array.
 We cannot change the base address of array.
 Str was a pointer, names is an array.
mohammed.sikander@cranessoftware.com 14
mohammed.sikander@cranessoftware.com 15
mohammed.sikander@cranessoftware.com 16
char **
*
Bangalore
Chennai
Guwahati
Amravathi
NULL
*
*
*
*
char *
char *
char *
char *
 Void pointers can hold the address of any
type of object.
 Dereferencing on void pointers are not
allowed.
 Incrementing void pointers are not allowed.
mohammed.sikander@cranessoftware.com 19
mohammed.sikander@cranessoftware.com 20
mohammed.sikander@cranessoftware.com 21
mohammed.sikander@cranessoftware.com 22
mohammed.sikander@cranessoftware.com 23
mohammed.sikander@cranessoftware.com 24
 How many bytes of memory is leaked
mohammed.sikander@cranessoftware.com 25
mohammed.sikander@cranessoftware.com 26
mohammed.sikander@cranessoftware.com 27
mohammed.sikander@cranessoftware.com 28
mohammed.sikander@cranessoftware.com 29
mohammed.sikander@cranessoftware.com 30

Pointer level 2

Editor's Notes

  • #21 #include <stdio.h> #include <stdlib.h> int main( ) { int *ptr = malloc(20); if(ptr == NULL) { printf("Unable to Allocate Memory..."); return 1; } //Assume allocation is successful printf("Allocation is successful... ptr = %p\n" , ptr); free(ptr); printf("After free... ptr = %p\n" , ptr); free(ptr); printf("After Second free... ptr = %p\n" , ptr); return 0; }
  • #22 #include <stdio.h> #include <stdlib.h> int main( ) { int *ptr = malloc(20); if(ptr == NULL) { printf("Unable to Allocate Memory..."); return 1; } //Assume allocation is successful printf("Allocation is successful... ptr = %p\n" , ptr); free(ptr); printf("After free... ptr = %p\n" , ptr); free(ptr); printf("After Second free... ptr = %p\n" , ptr); return 0; }
  • #25 #include <stdio.h> #include <stdlib.h> int main( ) { int *ptr1 = (int *)malloc(5 * 4); int *ptr2 = (int *)calloc(5 , 4); printf("Contents in memory allocated using malloc\n"); for(int i = 0 ; i < 5 ; i++) printf(" %d" , ptr1[i]); printf("\n"); printf("Contents in memory allocated using calloc\n"); for(int i = 0 ; i < 5 ; i++) printf(" %d" , ptr2[i]); printf("\n"); return 0; }
  • #31 #include <stdio.h> #include <stdlib.h> void readArray( int arr[],int n ) { for(int i = 0 ; i < n ; i++) scanf(" %d" , &arr[i]); } void printArray( int arr[] , int n){ for(int i = 0 ; i < n ; i++) printf(" %d" , arr[i]); } int main() { int *ptr1 = malloc(20); printf("\n ptr1 = %p ",ptr1); printf("Enter elements in first block \n"); readArray(ptr1 , 5);//Assume 1,2,3,4,5 is entered free(ptr1); int *ptr2 = malloc(20); printf("\n ptr2 = %p ",ptr2); printf("Enter elements in second block \n"); readArray(ptr2 , 5); //Assume 6,7,8,9,10 is entered if(ptr1 != NULL){ printf("Elements of first block are \n"); printArray(ptr1 , 5); } if(ptr2 != NULL){ printf("Elements of second block are \n"); printArray(ptr2 , 5); } }