In the previous post, we learned how to get the memory address of a variable and how to define a variable that holds the memory address i.e pointer.
Suppose that there is a variable of type
number. We initialize it with value equals to 10. Now, suppose that it has a memory address 091 (Sounds ridiculous but it’s just a supposition). This memory address is present somewhere in our device’s memory.
Some of the memory addresses are shown in the table below, along with the values present in each.
Now, we know that
number has a memory address 091. Then, why 092, 093 and 094 are also filled with value,
number? Well, just think a little on why not 095? 095 is just a garbage value!
Okay, okay! Let me clear this confusion.
number is of type
int and the size of
int is 4 bytes. Each memory address carries 1 byte. Therefore, to fit a variable of type
int, it requires 4 neighboring memory addresses.
number is having memory addresses, 091, 092, 093 and 094. But the only memory address that is useful to us, is the first one i.e 091. Every variable only knows its first memory address and its size. When we know the first memory address of a variable, we can easily get the value of that variable.
Now, suppose that we have a pointer of type
pNumber. We initialize it with the memory address of the
number (How to get memory address of a variable? By putting ampersand(&) behind it).
pNumber is also 091. We dereference it (i.e we put an asterisk(*) behind the
pNumber) to get the value 10.
Actually, when we dereference the pointer, we are actually, looking up the memory address which in this case, is 091. Pointer of type
int will suggest that whatever is present in this memory address will be the starting byte of the variable which is of type
Please read the above statement twice! It is a bit tricky!
To make it easy, here’s the same table:
After looking up the memory address, pointer takes the value which in this case, is 10.
If you try
sizeof() for pointer of any type, it will tell you that the size of pointer is 8 bytes (or may be different depending on your device). This is because a pointer consists memory address and memory address is a hexadecimal value. Hexadecimal values are big values! Therefore, every pointer resembles to type
long int which is also 8 bytes in size.
We can manipulate with the pointers as well. We will discuss it in the upcoming posts in detail. For now, just get along with pointers and the concept described above. It should not be hard now! There is still a huge ground to cover regarding pointers…