Doubt regarding the volatile keyword

This is a discussion on Doubt regarding the volatile keyword within the C Programming forums, part of the General Programming Boards category; What i understood is
(1)volatile unsigned char * ADC_address;
---ADC_address is a pointer which stores a volatile unsigned character .
...

what I understood is (volatile unsigned long *)(PINSEL_BASE_ADDR + 0x00) in this statement (PINSEL_BASE_ADDR + 0x00) is type casted to volatile unsigned long pointer. But (*(volatile unsigned long *)(PINSEL_BASE_ADDR + 0x00)) , what is for the starting star(dereferencing operator) after first bracket.

(*(volatile unsigned long *)(PINSEL_BASE_ADDR + 0x00)) , what is for the starting star(dereferencing operator) after first bracket.

You already know what it is - it's the dereferencing operator. This statement is saying "take PINSEL_BASE_ADDR, cast it to be a volatile unsigned long pointer, and then dereference it to give the unsigned long located there". In other words, using "PINSEL0" in your code read the value at PINSEL_BASE_ADDR (i.e. at 0xE002C000).

"The largest-scale pattern in the history of Unix is this: when and where Unix has adhered most closely to open-source practices, it has prospered. Attempts to proprietarize it have invariably resulted in stagnation and decline."