Возможный дубликат:
Почему эти функции обмена ведут себя по-разному?
Посмотрите на приведенный ниже код, целью которого является обмен двумя номерами, но это не так. Пожалуйста, помогите мне понять причину, почему это не так. Я новичок в программировании, поэтому буду благодарен, если вы объясните это больше, чем обычно. Спасибо!
#include void swap (int a, int b); int main (void) { int x = 1; int y = 2; swap (x, y); printf ("Now x is %d and y is %d\n", x, y); return 0; } //function definition of swap void swap (int a, int b) { int temp = a; int a = b; int b = temp; }
C является передачей по значению, поэтому функция swap
получает копии значений и не может влиять на переменные в вызывающем.
Чтобы повлиять на переменные в вызывающем, вам необходимо передать указатели на них.
void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; }
и назовите его
swap(&x, &y);
в main
.
Это связано с тем, что вы передаете переменные копией, а не указателем. Другими словами, ваши функции swap()
получают свои личные копии x
и y
и заменяют их, и результат обмена не отображается вызывающим. Правильный код может выглядеть примерно так:
#include void swap(int *a, int *b); int main(void) { int x = 1; int y = 2; swap(&x, &y); printf("Now x is %d and y is %d\n", x, y); return 0; } //function definition of swap void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; }