При работе с указателями и при передаче в функции параметров по ссылке используются операции (&) - адресации, и (*) - косвенной адресации или разыменования.
Например, указатель целого типа name описывается при косвенной адресации (разыменования) так:
int *name;
Унарная операция &, примененная к некоторой переменной, показывает, что нам нужен адрес этой переменной, а не ее текущее значение. Если переменная name объявлена как указатель, то оператор присваивания:
name = &x;
означает: "взять адрес переменной x и присвоить его значение переменной-указателю name".
Косвенная адресация (разыменование) *, примененная к указателю, обеспечивает доступ к содержимому ячейки памяти, на которую ссылается указатель. Например, *name можно описать словами как "то, что содержится по адресу, на который указывает name".
Указатели могут использоваться в выражениях. Если. например, переменная name указывает на целое x, то *name может во всех случаях использоваться вместо x:
*name+1; //увеличивает x на единицу
*name = 0; //равносильно x = 0
Два оператора присваивания:
name = &x;
y = *name;
выполняет то же самое, что и один оператор y=x.
Польза от применения указателей в таких ситуациях, мягко выражаясь, невелика.