What's the output?

int main()
{
        int arr[3] = {2, 3, 4};
        char *p;
        p = (char*)arr;
        printf("%d ", *p);
        p = p+1;
        printf("%d\n", *p);
        
        return 0;
}


(A) 2 3

(B) 2 0

(C) 1 0

(D) Garbage value

Solution

Assume start location of arr s 1000. So, the first two elements of the array will be stored in memory as follows:

1000: 0 0 0 0 0 0 0 2 (hexa decimal representation and assuming int takes 4 bytes)
1004: 0 0 0 0 0 0 0 3

Now, %d, *p will print the first 4 bytes starting at 1000, that is 2. When p is incremented, it will go to 1001, as p is a char pointer.

1001: 0 0 0 0 0 0 0 0

So, output will be 0.




blog comments powered by Disqus

Sister Sites: GATE Overflow, GATE CSE Wiki, GATE CSE, Aptitude Overflow

This work is licensed under the CC By-SA 3.0 , without all the cruft that would otherwise be put at the bottom of the page.