См. Следующий фрагмент кода и мое объяснение результата.
void f (int * p, int * q)
{
p = q;
*p = 2;
}
int i = 0;
int j = 1;
int main ()
{
f(&i, & j);
printf("%d %d\n", i, j);
return 0;
}
У нас есть две глобальные переменные i
и j
, и мы передаем указатель этих двух переменных в функцию f
.Когда мы делаем p = q
, мы фактически теряем ссылку на i
, и мы получаем два указателя, а именно p
и q
, оба указывая на j
.затем, когда мы делаем *p = 2
, мы фактически меняем значение j
на 2
.
Однако, поскольку мы потеряли ссылку на i
на шаге p = q
в основной программе, значение i
, которое будет напечатано, является глобальной переменной 0
.Следовательно, мы получаем результат как i = 0
и j = 2
.
, пожалуйста, скажите мне, если это правильное объяснение ...
Теперь другой вопрос, когда мы делаем p = q
вфункция f, создаст ли утечку памяти, потому что значение, ранее указанное p, будет недоступно.