in Programming in C
514 views
0 votes
0 votes
What is the Output of following code?

void main()

{

int i=10;

int *j;

void *k;

k=&i;

j=&i;

k++;

j++;

printf("Address of j=%u",j);

}
in Programming in C
514 views

2 Answers

2 votes
2 votes

 Initially j have address of i . since j is integer type pointer , if we increment the j then  

The output will be next address of memory location where i is placed .

              268672      i =10
Answer = 268676       

2 Comments

I think it will give compile time error
–1
–1
Try to compile in gcc compiler , it will not throw any error.
0
0
1 vote
1 vote

let size of int =2 bytes

as j stores base address(starting ) incrementing oj j is calculated as

j=(base address of i)+(size of int)*count ,

in ur program count =1 , hence j= BA+2

e.g if base address is 1000 , j=1000+2=1002.

BUT WAIT YOUR PROGRAM IS NOT A VALID PROGRAM

even though compiler will print the address stored in j but incrementing k is invalid step in your program

Actually, incrementing/decrementing of the void* is undefined behavior, as void* means actually pointer to some type. Compiler doesn't know how should it increment a void* and seems to use the predefined value.

So before the incrementing, you have to cast it to a correct type.

Related questions