Как гласит название, я всегда задаюсь вопросом, почему scanf
должен принять оператор address of
(&).Почему scanf должен взять адрес оператора
ответ
Поскольку C имеет только параметры «pass-by-value», поэтому для передачи «переменной» для ввода значения вы должны передать свой адрес (или указатель на переменную).
Для этого необходимо указать адрес. Если вы объявите переменную как указатель, то scanf
не понадобится &
.
Когда вы вводите что-то со стандартным устройством ввода (обычно с клавиатурой), данные, которые должны пройти, должны быть где-то stored
. Вы должны point
где-то в памяти, чтобы там можно было хранить данные. До point
место памяти, вам нужно address
этого местоположения. Таким образом, вы должны передать свой адрес переменной с помощью оператора &
с scanf()
.
Все остальные хорошо описали, что sscanf должен поставить свой вывод где-то, но почему бы не вернуть его? Безусловно, он должен вернуть много вещей - он может заполнить несколько переменных (управляемых форматированием), и он возвращает int, указывающий, сколько из этих переменных было заполнено.
scanf не принимает «адрес оператора (&) ". Требуется указатель . Чаще всего указатель на выходную переменную получает путем использования адреса-оператора в вызове scanf, например.
int i;
scanf("%i", &i);
printf("number is: %d\n", i);
Но это не единственный способ сделать это. Ниже так же, как действует:
int* iPtr = malloc(sizeof(int));
scanf("%i", iPtr);
printf("number is: %d\n", *iPtr);
Так:
int i;
int iPtr = &i;
scanf("%i", iPtr);
printf("number is: %d\n", i);
как значение будет сохранено, (где?), В адрес памяти. поэтому scanf() имеет дело с (&) оператором.
Спасибо человеку за это. –