Размышляя об указателях, вам необходимо прояснить некоторые абстракции.
Объект в памяти.Это может быть любого типа (и размера).Например, целочисленный объект будет занимать 4 байта в памяти (на 32-битных машинах).Объект указателя будет занимать 4 байта в памяти (на 32-битных машинах).Как должно быть очевидно, целочисленный объект содержит целочисленные значения;объект указателя содержит адреса других объектов.
Язык программирования C позволяет символам (переменным) представлять эти объекты в памяти.Когда вы объявляете,
int i;
символ (переменная) i представляет некоторый целочисленный объект в памяти.Более конкретно, он представляет ценность этого объекта.Вы можете манипулировать этим значением, используя i в программе.
& i даст вам адрес этого объекта в памяти.
Объект-указатель может содержать адрес другого объекта.Вы объявляете объект указателя, используя синтаксис,
int * ptr;
Как и другие переменные, переменная указателя представляет значение объекта, объекта указателя.Это значение просто является адресом какого-то другого объекта.Вы устанавливаете значение объекта указателя следующим образом:
ptr = & i;
Теперь, когда вы говорите ptr в программе, вы ссылаетесь на его значение, которое является адресом i,Но если вы говорите * ptr, вы имеете в виду не значение ptr, а значение объекта, адрес которого указан в ptr iei
Проблема с вашей функцией подкачки заключается в том, что вы меняете значения указателей, а не значения объектов, для которых эти указатели содержат адреса.Чтобы получить значения объектов, вам нужно использовать * ptr.