Мне интересно, почему вы не получили никакого предупреждения / ошибки компилятора. Вам нужно разыменовать вашу ссылку в функции:
void swapnum(int *i, int *j) {
int temp = *i;
*i = *j;
*j = temp;
}
Причина в том, что i
и j
внутри swapnum()
являются адресами исходных переменных при вызове функции. Поэтому, когда вы используете только i
или j
, вы получаете адрес переменной, а не ее содержимое. Вот идея того, что происходит:
int a = 10;
int b = 20;
-----------------
0x1000 | 10 | <-- a
-----------------
-----------------
0x1004 | 20 | <-- b
-----------------
swapnum(&a, &b);
Тогда внутри swapnum(int *i, int *j)
:
-----------------
0x2000 | 0x1000 | <-- i (*i == 10)
-----------------
-----------------
0x2004 | 0x1004 | <-- j (*j == 20)
-----------------