Pointer level 2

Preview:

Citation preview

C ProgrammingPointers – Level-II

Prepared by Mohammed SikanderTechnical LeadCranes 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 = %d\n“ , ptr_name , strlen(ptr_name));

printf(“Length of %s = %d\n“ , str_name , strlen(str_name));

mohammed.sikander@cranessoftware.com 5

char *ptr_name = “SIKANDER”;char str_name[ ] = “MUQADDAR”;

printf(“Size of ptr_name = %d\n“ , sizeof(ptr_name));

printf(“Size of str_name = %d\n“ , sizeof(str_name));

mohammed.sikander@cranessoftware.com 6

mohammed.sikander@cranessoftware.com 7

mohammed.sikander@cranessoftware.com 8

Array of Pointers

Array of PointersWe 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?

Array of Pointers

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

Array of Pointers

char *capitalCities[] = { “Bangalore”,“Chennai”, “Guwahati”, “Amravathi”};

Bangalore

Chennai

Guwahati

Amravathi

****

char *

char *

char *

char *

char *str = “VxWorks”;

mohammed.sikander@cranessoftware.com 13

mohammed.sikander@cranessoftware.com 14

Array of Pointers

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 15

Sorting of Strings stored in Array of Pointers

mohammed.sikander@cranessoftware.com 16

Passing Array of pointers to function.

Array of Pointers

char **

*Bangalor

eChennai

Guwahati

Amravathi NULL

****

char *

char *

char *

char *

void pointers

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

Void pointer

mohammed.sikander@cranessoftware.com 20

Program to demonstrate double free corruption.

mohammed.sikander@cranessoftware.com 21

Program to solve double free corruption.

mohammed.sikander@cranessoftware.com 22

mohammed.sikander@cranessoftware.com 23

Trying to delete memory of stack segment using free.

mohammed.sikander@cranessoftware.com 24

Memory allocated by calloc is set to zero.

mohammed.sikander@cranessoftware.com 25

Understanding Realloc How many bytes of memory is leaked

mohammed.sikander@cranessoftware.com 26

Program to understand realloc.If realloc allocates new block in different location, it copies data from old block to new block

mohammed.sikander@cranessoftware.com 27

Identify the problem

mohammed.sikander@cranessoftware.com 28

By making ptr as constant pointer, any modification to ptr can be caught at compile time.

mohammed.sikander@cranessoftware.com 29

Write the output : DMA

mohammed.sikander@cranessoftware.com 30

Recommended