edited by
1,126 views
0 votes
0 votes

What will be the output of the below code? the answer given is E)0 but I am not getting it.
 

#include <stdio.h>
void fun(short int *a,char *b)
{
    b += 2;
    short int *p = (short int*)b;
    *p = *a;
}


int main()
{
    void (*fptr)(short int *,char *)
    short int a = 101;
    char arr[] = {'a','b','c','d'};
    fptr = fun;
    (*fptr)(&a,arr);
    printf("%d", arr[3]);

    return 0;
}


$A)$ Compilation error.

$B) 100$

$C)$ Garbage Value

$D)$ Segmentation Fault.

$E) 0$

edited by

1 Answer

Best answer
1 votes
1 votes
 

go through these links before reading answer if these concepts are not clear

SO:

https://stackoverflow.com/questions/12279060/what-is-the-difference-between-short-int-and-int-in-c 

 

 

A[0](1000+0) A[1](1000+1) A[2](1000+2) A[3](1000+3)
a b c d

short int *p = (short int*)b;

what this line does is assigns address 1002 in "p" in such a way that it will take 2 bytes 1002 and 1003(since it takes 2 bytes)

Now, when we assign 101 to it because of little-endian format, the higher order byte having 0 will be placed in right (A[3]) and lower order byte having value 101 at A[2], What you can do to test this is run the same program with 300 O/P would be 1 because higher order byte has 1(requires 256) 

Endian 

https://www.geeksforgeeks.org/little-and-big-endian-mystery/

 

edited by

Related questions

1 votes
1 votes
1 answer
3
Mayankprakash asked Aug 30, 2018
491 views
Please suggest on below 2 points .I'm not able to understand those 2 points.Char s[100];1.What is difference between scanf("%s",s) and scanf("%[^\n]s",s)?2.how below two ...