В C параметры передаются в виде копии. Таким образом, p
и q
являются копиями исходных адресов &i
и &j
, переданных в func(&i, &j);
. Поэтому, когда вы делаете это:
p = q; //Here the address of p and q are made same.
p
и q
теперь действительно одинаковы, оба адреса j
. Поэтому, когда вы делаете это:
* p = 2; // value @ address pointed by 'p'(which is q) is now set to 2.
Он устанавливает то, на что p
указывает (что j
) на 2
.
i
не изменяется вообщеэто, так что все еще 0
. Вы передали адрес i
в качестве параметра p
, но сразу же отбросили этот адрес, установив вместо p
q
.