Почему scanf требует &?

Я хочу прочитать номер из стандартного ввода. Я не понимаю, почемуscanf требует использования& перед именем моей переменной:

int i;
scanf("%d", &i);

Почемуscanf нужен адрес переменной?

Ответы на вопрос(7)

always «передача по значению», что означает, что функцияscanf видит только копию текущего значения того, что вы указали в качестве выражения аргумента.

В этом случае&i это значение указателя, которое ссылается на переменнуюi. scanf можно использовать это, чтобы изменитьi, Если вы прошлиi, тогда он будет видеть только неинициализированное значение, которое (а) является UB, (б) не является достаточной информацией дляscanf знать, как изменитьi.

Это не нужно.

char s[1234];

scanf("%s", s); 

Работает просто отлично без единого& в любом месте. Какиеscanf и компании нужныpointers, Чтобы позволить ему изменить конкретную переменную, вы передаете адрес этой переменной. Для нескольких типов это происходит по умолчанию. Для других вы используете& взять адрес (получить указатель на эту переменную).

scanf() хранит значения, поэтому ему нужно место для их хранения.
где хранить значения, используяaddressof или & amp; (амперсанд) оператор.

), поскольку он принимает указатель в качестве аргумента. Поэтому, чтобы передать переменную, которая будет установлена в переданное значение, вы должны сделать указатель из переменной, чтобы ее можно было изменить.

Причина, по которой указатель должен быть передан в scanf, состоит в том, что если вы только что передали переменную, вы не сможете напрямую изменить переменную в scanf, поэтому вы не можете установить для нее значение, считываемое scanf.

Надеюсь это поможет.

Потому что в противном случае это будет только изменение копии, а не оригинала.

int decimal;
int *pointer = &decimal;
scanf("%d", pointer);

вышеуказанный код действителен

 27 июл. 2017 г., 10:13
Вы 'даете это'pointer*.
Решение Вопроса

by value вам нужно передать указатель, если вы хотите, чтобы функция могла изменять параметр.

Вот очень простой пример, показывающий это:

void nochange(int var) {
    // Here, var is a copy of the original number. &var != &value
    var = 1337;
}
void change(int *var) {
    // Here, var is a pointer to the original number. var == &value
    // Writing to `*var` modifies the variable the pointer points to
    *var = 1337;
}
int main() {
    int value = 42;
    nochange(value);
    change(&value);
    return 0;
}
 04 янв. 2019 г., 08:46
@ Дан. Вы правы. Хотя вы совершенно правы, если вам все еще немного страшно, я рекомендую вам посмотреть «Эшли Миллс». C видеоуроками на YouTube по указателям.
 18 дек. 2018 г., 16:24
Просто найти это и учиться сам. Имейте продолжение, если кто-то читает это ... & amp; дает вам доступ к сохраненному местоположению, чтобы вы могли изменить значение? Это так, как я понимаю, в любом случае ....

Ваш ответ на вопрос