Void pointer in c

SANDIPMORADIYA 508 views 13 slides Sep 19, 2021
Slide 1
Slide 1 of 13
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13

About This Presentation

void pointer concepts with examples


Slide Content

Generic coding with void *
02/22/17
By: Sandip Moradiya
1

Supposewehavetodeclareintegerpointer,character
pointerandfloatpointerthenweneedtodeclare3pointer
variables.
Insteadofdeclaringdifferenttypesofpointer
variableitisfeasibletodeclaresinglepointervariable
whichcanactasintegerpointer,characterpointer.
void pointer (generic pointer)
2

Basic of void pointer
In C General Purpose Pointer is called as void Pointer.
It can store address of any type of variable
The compiler has no idea what type of object a void Pointer
really points to ?
Memory required for void pointer is 8 byte
Void pointer increment by 1 byte
It does not have any data type associated with it
3

Declaration of Void Pointer
void *pointer_name;
Void Pointer Example :
void *ptr; // ptr is declared as Void pointer
char cnum;
int inum;
float fnum;
ptr = &cnum; // ptr has address of character data
ptr = &inum; // ptr has address of integer data
ptr = &fnum; // ptr has address of float data
4

Dereferencing void pointer
We cannot directly dereference void pointer
like,
int intData=10;
void *ptr;
ptr=&intData;
printf(“%d”,*ptr);
// output: compiler warning/error
Type casting of void pointer is needed
printf(“%d”,*(int *)ptr);
//output: 10
5

void pointer reference to array
char string[]={“Hello World"};
void *ptr;
ptr=&string[0];
printf(“data : %s\n”, (char*)ptr);
//output: data : Hello World
int data[]={1,2,3,4,5,6};
void *ptr=&data[0];
for(int i = 0; i < 6; i++)
{
printf(“%d ”,ptr);
ptr = ptr + 4; // pointing to next element in array
}
//output: 1 2 3 4 5 6
6

void pointer dereference from array
char string[]={“Hello world"};
void *ptr;
ptr=&string[0];
int data[]={1,2,3,4,5,6};
void *ptr=&data[0];
for(int i = 0; i < strlen(string); i++)
printf("%c",*(char *)ptr++);
//output : Hello world
for(int i = 0; i < 6; i++)
{
printf("%d ",*(int *)ptr);
ptr=ptr+4;
}
//output : 1 2 3 4 5 6
7

void pointer reference to structure
struct structure
{
int num;
char c;
}stData;
struct structure data;
void *ptr;
ptr = &data;
8

void pointer dereference from structure
struct structure data;
void *ptr;
ptr = &data;
data.num=10;
data.c='a';
printf("%d",*(int *)ptr);
//output: 10
s1 = s1 + 4;
printf("%c",*(char *)ptr);
// output: a
struct structure
{
int num;
char c;
}stData;
9

Array of void pointer
int data1 = 0, data2 = 30, data3=12;
void *ptr[3];
ptr[0]=&data1;
ptr[1]=&data2;
ptr[2]=&data3;
for(int i = 0; i < 3; i++)
printf("%d\n",*(int *)p[i]);
//output: 0
30
12
10

void pointer as parameter of function
int num(void * vPtrData)
{
int result=*(int *) vPtrData;
return result;
}
int data=10;
void *ptr=&data;
printf("%d\n",num(ptr));
//output: 10
11

Void function pointer
void *num(int pdata)
{
void *result=&pdata;
return result;
}
int data=10;
void *ptr=&data;
printf("%d\n", *(int *)num(data));
//output: 110
12

Thank you
13