Solve the question | Sololearn: Learn to code for FREE!

+1

Solve the question

#include <stdio.h> #include <stdlib.h> int main() { int z; // what would be the value of z ,so that the output will '4' int *x; x = (int *)malloc(sizeof(int)); char *c; c = (char *)malloc(sizeof(char)); *x = z; c = x; c++; printf("%d\n", *c); return 0; } // a) 1234 , b)4132 , c)2431 , d)1243

8/14/2022 6:29:32 AM

Arijit Saha

2 Answers

New Answer

+1

I will assume a little endian system here, as the given values would not work for a big endian system. Initially c = x; sets `c` to the lowest memory address of the byte sequence of `x`, i.e. it refers to the least significant byte. The increment then advances the pointer to the second byte. Assuming a standard integer representation with 8 bit, for that byte alone to represent 4, only the third bit may be set (since 2^2 = 4). In the context of the whole integer, that would be the 11nth bit, which contributes as 2^10 = 1024 to its overall value. The least significant byte can represent anything between 0 and 255, so any answer in the range 1024 to 1279 would be correct. This applies to both 1234 and 1243.

0

Shadow answer is right But can u please explain it clearly