Suraj Jain - 1 month ago 6
C Question

# Confused pointer Dereferencing?

How does dereferencing Pointer Know how many bytes it has to read ?

If I make a program like

`````` int y = 1234;
char *p = &y;
int *j  = &y;
printf("%d " , *p);
printf("%d" , *j);

Output is : -46 1234
``````

I want to know what is happening behind the scenes and how does dereferencing pointer p is giving me
`-46`
.

Answer

If you have something like ,

``````int x = 1234 ;
int *p = &x;
``````

If You Dereference Pointer `p` then it will correctly read integer bytes. Because You declared it to be pointer to `int` . It will know how many bytes to read by `sizeof()` operator. Generally size of `int` is 4 bytes but it is machine dependent that is why it will use `sizeof()` operator to know correct size and will read so .If you have something like this

`````` int y = 1234;
char *p = &y;
int *j  = &y;
``````

Now `pointer p` points to `y` but we have declared it to be pointer to a `char` so it will only read one byte or whatever byte char is of . `1234` in binary would be represented as `00000000 00000000 00000100 11010010`.

Now if your machine is little endian it will store the bytes reversing them `11010010 00000100 00000000 00000000` . `11010010` is at `address 0` `Hypothetical address` , `00000100` is at `address 1` and so on.

So now if you dereference `pointer p` it will read only first byte and output will be `-46` as byte read would be `11010010`(Because we pointed `signed char` ,so the `most-significant bit` is the sign bit. First bit `1` denotes the sign. `11010010 = –128 + 64 + 16 + 2 = –46`.) and if you dereference `pointer j` it will completely read all bytes of `int` as we declared it to be pointer to int . And output will be `1234`

And Also if you declare pointer j as `int *j` then `*j` will read `sizeof(int)` usually 4 bytes and `*(j+1)` will also read that many bytes . Same goes with `char` or any other data type the pointer pointed to them will read as many bytes there size is of. Generally `char` is of 1 byte.

Source (Stackoverflow)
Comments