Давайте шаг за шагом пройдемся по вашему коду
#include <iostream>
using namespace std;
int* fun(int *a){
Следующая строка означает: «получить значение из местоположения, на которое указывает указатель a
, добавить 5 к нему и записать его вуказатель местоположения a
указывает на ". Это не меняет сам указатель!
*a = *a +5;
Далее возвращает указатель a
, который является точно таким же значением, которое было передано функции
return a;
}
int main(){
int x, y, *xpntr, *ypntr;
x = 3;
Назначьте xpntr
ячейку памяти x
xpntr = &x;
Вызовите fun
с xpntr
, откажитесь от того, что он вернет.x тогда будет 3 + 5 = 8
fun(xpntr);
. Присвойте y
результат 10 + ( значение того, на что xpntr
указывает на / 2) - xpntr isnне изменилосьy = 10 + (8/2) = 14
y = 10 + (*xpntr / 2);
Позвоните fun
с xpntr
, что-то происходит с тем, на что указывает xpntr
, но, как мы уже узнали, сам xpntr не являетсяизменилось в процессе.Значение, возвращаемое fun
(равное xpntr
), присваивается ypntr
.x будет снова изменен на 8 + 5 = 13
ypntr = fun(xpntr);
Назначить, куда указывает ypntr
(который сейчас идентичен xpntr
сумме того, на что указывает xpntr
и ypntr
. Таким образом, x будет 13 + 13 = 26 ← отсюда ваши 26!
*ypntr = *xpntr + *ypntr;
Выведите значения где xpntr
и ypntr
указать на.
cout << x << " " << y << " " << *xpntr << " " << *ypntr << endl;
}