Прежде всего, я бы порекомендовал либо почитать хорошую книгу по Си, либо поискать учебник в Интернете, чтобы получить некоторые базовые знания.
int *i;
i = &j;
Это делает указатель переменной i
, указывающей на ту же область памяти, где находится переменная j
(так что ваше предположение верно).
*i = 7;
Теперь местоположение, на которое указывает i
, обновляется до значения 7. Таким образом, j
больше не равен 10, теперь оно равно 7, поскольку *i
и j
- это одно и то же значение.
i = (int *) malloc(sizeof(int));
Теперь вы выделили новый кусок памяти кучи, достаточный для хранения одного значения int
. i
больше не указывает на местоположение j
.
*i = j;
Установите значение, хранящееся в местоположении, указанном i
, таким же, как j
, в данном случае 7.
j = j + 5;
Увеличение j
на 5. Поскольку i
больше не указывает на &j
, значение, сохраненное в *i
, не изменяется.
printf("%d %d", *i, j);
Значение печати *i
и j
.
Как было показано ранее, i
указывает на область памяти со значением 7, а j
равно 7 + 5 = 12.