Representation or what exactly constitutes the value of a pointer is an implementation detail. C makes no demands on him. There is no guarantee whether the value will be the same or different each time the code is run.
Only pointer arithmetic between valid pointers (for example, comparing two pointers inside an array object) is defined by the C standard.
By the way, you should point to void* to print with %p , as the C standard requires:
printf("%p\n", (void*) pPointer );
As noted in the comments, some operating systems have randamization of the address space layout . Linux does this by default. For your code, I get the following output with ASLR:
$ ./a.out nNUmber is equal to : 15 nNumber is equal to : 25 0x7fffde18ba7c $ ./a.out nNUmber is equal to : 15 nNumber is equal to : 25 0x7fff981efe0c $ ./a.out nNUmber is equal to : 15 nNumber is equal to : 25 0x7ffdade6837c $ ./a.out nNUmber is equal to : 15 nNumber is equal to : 25 0x7ffced208b4c
If I disable it with:
echo 0 > /proc/sys/kernel/randomize_va_space
then it gives the same values:
$ ./a.out nNUmber is equal to : 15 nNumber is equal to : 25 0x7fffffffeaec $ ./a.out nNUmber is equal to : 15 nNumber is equal to : 25 0x7fffffffeaec $ ./a.out nNUmber is equal to : 15 nNumber is equal to : 25 0x7fffffffeaec $ ./a.out nNUmber is equal to : 15 nNumber is equal to : 25 0x7fffffffeaec $ ./a.out nNUmber is equal to : 15 nNumber is equal to : 25 0x7fffffffeaec $ ./a.out nNUmber is equal to : 15 nNumber is equal to : 25 0x7fffffffeaec $ ./a.out nNUmber is equal to : 15 nNumber is equal to : 25 0x7fffffffeaec $ ./a.out nNUmber is equal to : 15 nNumber is equal to : 25 0x7fffffffeaec $ ./a.out nNUmber is equal to : 15 nNumber is equal to : 25 0x7fffffffeaec
But as for standard C, there is no guarantee on the values.
source share