Там очень много полезных объяснений, но я не нашел только краткое описание, поэтому ..
В основном указатель является адресом переменной.
Краткий сводный код:
int a, *p_a;//declaration of normal variable and int pointer variable
a = 56; //simply assign value
p_a = &a; //save address of "a" to pointer variable
*p_a = 15; //override the value of the variable
//print 0xfoo and 15
//- first is address, 2nd is value stored at this address (that is called dereference)
printf("pointer p_a is having value %d and targeting at variable value %d", p_a, *p_a);
Также полезную информацию можно найти в теме Что означает ссылку и разыменование
И я не совсем уверен, когда могут быть полезны указатели, но обычно их необходимо использовать, когда вы выполняете какое-то ручное / динамическое выделение памяти - malloc, calloc и т. Д.
Так что я надеюсь, что это также поможет прояснить проблему:)