Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
Vegas_I
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
#1

Почему в scanf нужно указывать именно адреса переменных?

18.01.2014, 14:03. Просмотров 563. Ответов 6
Метки нет (Все метки)

Почему в функции scanf нужно указывать именно адреса переменных? Почему не работает, когда указываем переменную? Что хранит в себе переменная и что хранит в себе адрес переменной? Разъясните пожалуйста, хочу подробно разобраться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2014, 14:03
Ответы с готовыми решениями:

Почему высвобождать память нужно именно так?
int **arr = new int *; for (int i = 0; i < N; i++) { *(arr+i) =...

Почему при присваивании адреса массива не ставится знак '&' получения адреса
int main() { int a = { 2, 3 }; int* b; b = a; //Почему при присваивании...

Зачем нужно явно указывать тип переменной?
Всем привет! Объясните зачем нужно явно указывать тип переменной? Например в...

Почему именно С++?
Всем привет. Кто может объяснить, почему везде востребованы программисты С++?...

Почему именно C#?
В конечном итоге нужно программировать на 1С, но так как репетитора по 1С найти...

6
alsav22
5439 / 4834 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.01.2014, 14:09 #2
Если передать в функцию просто переменную, то это - передача по значению (передаётся копия переменной), поэтому, все изменения копии в функции, никак не отразятся на самой переменной. Если же передаётся адрес, то, изменения содержимого по этому адресу, изменят и саму переменную.
2
__General__
24 / 24 / 12
Регистрация: 04.01.2014
Сообщений: 91
Завершенные тесты: 2
18.01.2014, 14:14 #3
Vegas_I, в scanf нужно передать адрес переменной для того, чтобы по этому адресу сохранилось значение, вводимое пользователем:
Цитата Сообщение от alsav22 Посмотреть сообщение
Если же передаётся адрес, то, изменения содержимого по этому адресу, изменят и саму переменную.
1
Vegas_I
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
18.01.2014, 14:20  [ТС] #4
Хорошо, а почему тогда пишет "The variable is being used without being initialized". Ведь судя по тому, что вы сказали, программа должна работать. Пусть сама переменная не измениться(а только её копия), но тем не менее она должна работать.
0
alsav22
5439 / 4834 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.01.2014, 14:26 #5
Цитата Сообщение от Vegas_I Посмотреть сообщение
а почему тогда пишет "The variable is being used without being initialized".
Для этого нужно видеть код, по которому такое пишет.

Добавлено через 4 минуты
Скорее всего, передаёте по значению неинициализированную переменную. Но так как адрес есть даже у неинициализированной переменной, то, при передаче адреса, такое предупреждение уже не выдаётся.
0
Vegas_I
1 / 1 / 0
Регистрация: 28.02.2013
Сообщений: 103
18.01.2014, 14:27  [ТС] #6
C++
1
2
int k;
char z;
...
C++
1
scanf("%d %c", k, &z);
Я убрал "&" перед "k". Пишет "The variable 'k' is being used without being initialized"
0
alsav22
5439 / 4834 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.01.2014, 14:39 #7
5 пост.
0
18.01.2014, 14:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2014, 14:39

Адреса переменных
У меня возник вопрос, можно ли записать в бинарный файл адрес переменной? Если...

При вынесении определения всегда ли нужно указывать функцию как inline явно?
Бьярни пишет class char_stack { int size; char* top; char* s; ...

Как вывести адреса переменных?
Помогите доработать программу, так чтобы выводились адреса значений #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru