/ c

C/C++ Pointer

Todays blog post is on C/C++ pointer. Pointer allows you to access memory address directly.
Pointer points to memory address of a variable.
Like,

int n;   // A normal variable
int *p;  // A pointer variable
p = &n;  // Pointer p holds memory address of n

When we take input in a c/c++ console program,

int number;
scanf("%d", &number);

Here actually assigning input to the memory address of number.

& = address of

A integer variable hold 4 bit of space in memory.
So if number's memory address is 466 then next address of another variable will be 470. Because number holds memory address block 466-469.

To be more clear lets assume an array numbers which is an array of integers.

int numbers[5];

This array can hold 5 integer numbers. And if address of first index is 319 then next will be 323, then 327 and last one is 335.

Lets play with a block of code,

int x, y, z;
int *p, *q, *r;
p = &x;
q = &y;  // Assigning address
r = &z;
x = 10;
y = 20;
z = 30;
p = q;
*q = 25;  // Assigning value
x = 40

In above code x, y, z is normal variable holding value 10, 20, 30. And pointer variable p, q, r point to x, y, z so they have value of x, y, z;
In last 3 lines we have assigned q to p, so p and q both points to y. Next line changing value of q so it will change value of y and p (as p and q now points to same memory address). Lastly changing value of x and it won't affect value of p as p isn't pointing to x anymore.