void swap(int *x, int *y){
int* temp;
temp = x;
x = y;
y = temp;
}
swap()
принимает здесь два указателя на int
, но внутренне только меняет значения локальных указателей x
и y
- адреса объектов, на которые они указывают. - Означает, что в конце swap()
перед возвратом x
указывает на объект, на который указывает y
, и y
указывает на объект, на который указывает x
.
Существует не влияет на вызывающего в объектах x
и y
, на которые указывают.
Если вы хотите поменять местами значения объектов, на которые указывают x
и y
, вам нужно определить swap()
следующим образом:
void swap(int *x, int *y){
int temp;
temp = *x; // temp gets the int value of the int object x is pointing to.
*x = *y; // x gets the int value of the int object y is pointing to.
*y = temp; // y gets the int value of temp (formerly x).
}
Пример Программа ( Онлайн Пример ):
#include <stdio.h>
void swap(int *x, int *y){
int temp;
temp = *x; // temp gets the int value of the int object x is pointing to.
*x = *y; // x gets the int value y of the int object y is pointing to.
*y = temp; // y gets the int value of temp (formerly x).
}
int main (void)
{
int a = 1, b = 2;
printf("Before the swap() function:\n");
printf("a = %d b = %d\n\n",a,b);
swap(&a,&b);
printf("After the swap() function:\n");
printf("a = %d b = %d",a,b);
return 0;
}
Вывод:
Before the swap() function:
a = 1 b = 2
After the swap() function:
a = 2 b = 1