Рассмотрим следующую программу C:Передача массива в функцию в C
#include <stdio.h>
void swap(int []);
int main(void) {
int a[3] = {1, 2, 3};
swap(a);
printf("%d %d %d\n", a[0], a[1], a[2]);
swap(&a[1]);
printf("%d %d %d\n", a[0], a[1], a[2]);
return 0;
}
void swap(int x[]) {
int temp = x[0];
x[0] = x[1];
x[1] = temp;
}
Может кто-нибудь объяснить, почему следующий код дает выход
2 1 3
2 3 1
вместо
2 1 3
1 2 3
Я понимаю, что swap(a)
свопы a[0]
и a[1]
. Но я не уверен, как работает swap(&a[1])
. В обоих случаях мы передаем массив a
в функцию swap
, не так ли? Таким образом, моя гипотеза заключалась в том, что swap(&a[1])
должен снова обменять a[0]
и a[1]
, дав нам прежний заказ 2 3 1
.
EDIT: Этот код был написан как предполагалось. Я просто хотел посмотреть, что произойдет, если мы передадим адрес элемента, отличного от первого элемента, в функцию. По-видимому, если я передаю &a[n]
в функцию, он игнорирует все элементы до a[n]
и обрабатывает a[n]
в качестве первого элемента?
Да, я понимаю. Но как именно работает 'swap (& a [1])? Другими словами, что происходит, когда мы передаем в функцию адрес, который не является первым элементом? Оказывает ли это выражение '& a [1]' как адрес первого элемента? – Vizuna
change swap (& a [1]) для обмена (& a [0]) –