ИСПОЛЬЗОВАНИЕ УКАЗАТЕЛЕЙ
Указатели несколько различно ведут себя СЛЕВА и СПРАВА от оператора присваивания. Нас интересует новая операция, применяемая только к указателям:
*pointer
СПРАВА от присваиваний и в формулах =================================== *pointer означает "взять значение переменной (лежащее в ящике), на которую указывает указатель, хранящийся в переменной pointer".
В нашем примере - это число 12.
То есть *pointer означает "пройти по стрелке и взять указываемое ею ЗНАЧЕНИЕ".
printf("%d\n", *pointer);
Печатает 12;
z = *pointer; /* равноценно z = 12; */ z = *pointer + 66; /* равноценно z = 12 + 66; */
Заставим теперь указатель указывать на другую переменную (иначе говоря, "присвоим указателю адрес другой переменной")
pointer = &var2;
________ /pointer/ _/_______/_ | | | &var2 | | | |_______|_| | |&var2 | V ________ / var2 / _/_______/_ | | | 43 | | | |_________|
После этого z = *pointer; означает z = 43;
Таким образом, конструкция
z = *pointer;
означает
z = *(&var2);
означает
z = var2;
То есть * и & взаимно СТИРАЮТСЯ.