Указатель - это просто переменная, как и любая другая, но он содержит адрес памяти.
Считайте эту строку примерно 6 раз.Указатель имени сам по себе кажется пугающим, но на самом деле его просто называют так, чтобы нам было легче думать о происходящем.
Тип указателя (например, char *, int *, Point*) просто сообщает компилятору, что хранится по этому адресу памяти.
Так что все указатели похожи в том, что все они хранят простой адрес памяти.Но они отличаются тем, что тип указателя скажет вам, что будет содержаться по этому адресу памяти.
и почему p никогда не объявлялось?
pобъявляется:
//p is declared to be a variable that holds an address
// and at that address it holds a type Point
//p itself only holds an address not the actual data of the Point.
void MoveUp (Point * p)
{
//The -> operator when applied to a pointer, means give me the object at
// that address and then access the following member
p->Y += 5;
}
что именно адрес памяти?что это может быть использовано в качестве аргумента?
Вы можете думать об адресе памяти просто как о числе.В 32-битных программах это число составляет 4 байта.В 64-битных программах это число имеет длину 8 байт.
Рассмотрим следующий код:
Point point;
Point *p = &point;
Переменная point
имеет тип Point
.Он содержит объект класса Point
.
. Выражение &point
возвращает адрес переменной Point
point
.Выражение &point
имеет тип Point*
.
Переменная p
содержит адрес типа Point, тип p
равен Point*
.p
хранит адрес в памяти объекта point
.