1,446 views
2 2 votes
int main() {
    int i,n;
    int x = 123456789;
    void *a = &x;
    unsigned char *c1 = (unsigned char*)a;
    for(i=0;i< sizeof a;i++) {
        printf("%u  ",*(c1+i));
    }
    char *c2 = (char*)a;
    printf("\n %d", *(c2+1));
    char *c3 = (char*)a;
    printf("\n %u \n", *(c3+1));
}

Output ?

1 Answer

Best answer
2 2 votes
 int x = 123456789;

See how data will be stored ,

00010101 11001101 01011011 00000111

a is pointing to address of int x.

unsigned char *c1 = (unsigned char*)a;

Now char c1 is pointing to the location of a.

Next statement is printing consequtive 4 bytes which are unsigned in nature.

So value will be:21   205   91    7 (See from above table)

 char *c2 = (char*)a;

Char c2 contains address of a which is signed .Now it is printing second byte value at pointed by a.

And correspoinding value will be -51(which will fall inside signed range ).

 char *c3 = (char*)a;

Char c3 contains address of a which is also signed .Now it is also printing second byte value pointed by a. But it is signed .

PS: *(c3+1) is promoted inside printf to a 32 bit integer , preserving sign. ( padding ones because, initialy *c3 was a signed char having 1 in the sign bit, and it is itself in 2's complement form). After that we read using %u specifier which simply tells how to interpret the promoted data. %u nothing to do with promotion.
So, in the last printf %u reads the promoted data 11111111111111111111111111001101 as 4294967245.

Out:4294967245

• selected by
Position:
Show:

Related questions

0 0 votes
1 1 answer
1.7k
1.7k views
Psnjit asked Jan 12, 2019
1,717 views
main(){unsigned int i= 255;char *p= &i;int j= *p;printf("%d\n", j);unsigned int k= *p;printf("%d", k);} Both the outputs are -1. I have even tried with - int i = 255(3rd ...
0 0 votes
1 1 answer
1.9k
1.9k views
Mr khan 3 asked Nov 3, 2018
1,863 views
#include<stdio.h void fun(int *p,int *q) { p=q; *p=q; } int i=0,j=1; int main() { fun(&i,&j); printf("%d%d",i,j); }What will be the output of i and j in 16-bit C Compiler...
0 0 votes
1 1 answer
1.6k
1.6k views
sushmita asked Sep 30, 2018
1,569 views
What is the interpretation of following C declaration:char *(*( foo[][8])())[];(A) foo is array of 8 pointer to pointer to function returning pointer to array of pointer ...