Вопрос:
Чем отличаются вводы данных:
scanf("%d \n", a)
scanf("%d \n", &a)
для чего нужен амперсанд?
И для каких задач применяется каждый вариант (пожалуйста приведите примеры для чайника в проге))
C/C++
Программирование. Основы языка Си.
scanf требует в качестве аргументов указатели, первый – на константную строку для форматной строки (управляющей строки), а остальные типизированные. Для аргументов-значений требуется передавать адрес переменной (вот здесь и нужен амперсанд), а для указателей и символьных массивов (строк) этого делать не нужно. Так как указатель он уже хранит адрес некой переменной, а имя массива – указатель на его первый элемент. Делается это для того, что при передачи аргументов в функцию, они заменяются формальными параметрами, которые относятся к локальной области видимости, ограниченной телом функции, хранятся в автоматической области памяти и также автоматически будут удалены из стека по завершении работы функции. Выделенная под них память будет освобождена, а занесённые в них данные будут хранить случайные значения. Переданный в функцию указатель лишён такого недостатка, так как память на которую он указывает не является локальной областью видимости функции. Наоборот, функция через указатель получает доступ к переменной из внешней области видимости и по необходимости может изменить значение по переданному ей указателю, которое сохранится после завершения работы данной функции. scanf относится к таким функциям.
scanf пишет результат ввода по указанному в аргументе адресу. Амперсанд как раз и берет адрес переменной.
это первые страницы любого учебника по с/с++
при передачи переменной в функцию её значение изменить нельзя, чтобы можно было изменить значение переменной передают адрес переменной, а не саму переменную.
out лучше scarf
Похожие вопросы
- Программирование на языке Си
- На каком языке программирования написан C (Си)?
- Решить задачу на языке СИ
- Написать код на языке си
- Написать программу на языке Си
- Помогите с решением задачи на языке СИ
- Си!!! БЕЗ УКАЗАТЕЛЕЙ, ЯЗЫК СИ
- Упорядочить элементы массива по возрастанию на языке Си
- Создать файл ABONENT.dat, содержащий записи следующей структуры: ФИО абонента; его номер телефона. на языке си++
- Хелпаните, кто-нибудь! Программирование на языке С/С++.