Я немного запутался здесь.Это из большой книги по Си, и, может быть, я слишком много сомневаюсь в этом, но почему-то это не имело смысла.Я надеюсь, что смогу объяснить свою путаницу.
Допустим, ниже &a
указывает на адрес памяти 87, а &b
указывает на адрес памяти 120;
int a = 3;
int b = 4;
swap(&a, &b);
void swap(int *px, int *py) {
int temp;
temp = *px;
*px = *py;
*py = temp;
}
ОК, здесьвопрос: когда мы вызываем функцию swap и передаем параметры функции , устанавливаем ли мы «px» на 87 или «* px» на 87?
Потому что если мыустанавливаем * px на 87, а затем по определению знака *
мы устанавливаем значение, на которое ссылается указатель, но не адрес памяти p, что неверно в этом примере.С другой стороны, если мы на самом деле устанавливаем «p» равным 87, тогда код в swap имеет смысл, потому что тогда, когда мы будем использовать знак * в функции, мы будем ссылаться на значение в этом адресе, которое равно «3».Вот.Но тогда почему синтаксис сбивает с толку и выглядит так, как будто мы устанавливаем
*px = 87
?