Первый взгляд на переменные(и cin)

Переменные

Инструкция x=5 выглядит достаточно очевидной. Как вы можете догадаться, мы присваиваем значение 5 x.  Но что такое x? x  это переменная.

Переменной в с++ называют часть памяти, которая может быть использована для хранения информации. Вы можете считать, что переменная это своего рода почтовый ящик, куда мы можем положить или извлечь информацию. У всех компьютеров есть память – RAM, которая пригодна для использования программами. При объявлении переменной под нее выделяется кусок памяти.

В этом разделе мы собираемся рассмотреть только целочисленные переменные. Целочисленная переменная – переменная, которая может содержать в себе только целое число.

Для того чтобы объявить переменную мы используем инструкцию объявления. Вот пример объявления целочисленной переменной x.

Когда данную инструкции выполнит центральный процессор, в оперативной памяти под переменную будет отведена некоторая часть памяти. Ради примера, давайте предположим, что переменная x  расположена по адресу 140. Всякий раз, когда программа видит переменную x в выражении или инструкции, она знает, что ей нужно обращаться к памяти по адресу 140.

Одно из наиболее распространенных действий  осуществляемых с переменными является присваивание.  Для этого, мы используем оператор присваивания, более известный как равно, более известный как символ =.  Когда ЦП исполняет инструкцию x=5; он воспринимает ее как: «поместить значение 5 в память по адресу 140».

Далее в нашей программе мы могли бы вывести это значение на экран, используя cout.

В с++ переменные также известны, как l-values. L-value – значение, которое имеет адрес(в памяти). Поскольку все переменные имеют адрес, все переменные являются l-values. Первоначально они были названы l-value, потому что только они могут находиться с левой стороны оператора присваивания. Когда мы объявляем переменную, с левой стороны оператора присваивания должен быть l-value. Следовательно, инструкция 5=6; вызовет ошибку компиляции, потому что 5 не является l-value. Значение 5 не имеет адреса и, следовательно, ничто не может быть присвоено 5. 5 означает 5, и значение его невозможно переназначить. Когда  l-value присваивается значение, его текущее значение перезаписывается.

Противоположностью l-value является r-value. К r-value относится  любое значение, которое может быть присвоено l-value. Примерами r-values являются числа(например 5), переменные(например x), выражении(например 2+x).

Вот пример некоторых операций присваивания, показывающих какие значения может иметь r-value:

 

Стоит отметить две важные вещи. Во-первых, нет никакой гарантии, что при каждом запуске программы вашей переменной будет присвоен один и тот же адрес. Первый раз, когда вы запустите программу переменная x быть может, будет расположена по адресу  140. Во второй раз она может разместиться по адресу 168. Во-вторых, когда переменной присваивается ячейка памяти, значение в данной ячейке не определено (другими словами, любое предыдущие значение все еще там).

Это может привести к любопытным ( под любопытным, мы подразумеваем опасные) результатам. Рассмотрим следующую короткую программу:

В этом случае, компьютер присвоит x некоторую не  использованную память. Затем передается присущие данной области памяти значение объекту cout, который печатает это значение в консоли. Но какое значение он напечатает? Ответ – «Кто его знает!». Вы можете попытаться запустить эту программу у себя и увидеть какое значение отобразится в консоли. Когда мы запустили эту программу с помощью старой версии компилятора, cout отобразил значение  -858993460. А при использовании новой версии компилятора, появилось сообщение об ошибке.

Переменная, которой не было присвоено значение называется неинициализированной переменной. Неинициализированные переменные очень опасны, поскольку они вызывают периодические проблемы (из-за наличия различных значений каждый раз при запуске программы). Это делает их трудными для отладки. Большинство современных компиляторов будет выдавать предупреждение во время компиляции, если они смогут обнаружить переменную, которая используется, но при этом не проинициализирована. Например, компиляция вышеуказанной программы на Visual Studio 2012 выдает следующее предупреждение:

Хорошим правилом считается всегда при объявлении переменной присваивать ей значение. С++ справляется с этим легко, позволяя присваивать значение переменной прямо в строке объявления:

Это гарантирует, что переменная всегда будет иметь приемлемое значение, что сделает проще отладку программы, если что-то пойдет не так.

Одна из распространенных хитростей, которую используют опытные программисты, это инициализировать переменную значением, которое выходит за пределы диапазона значений для этой переменной. Например, если бы у нас была переменная для хранения количества кошек старушки, живущей по соседству, мы бы сделали следующие:

Иметь -1 кошку звучит бессмысленно. Так что, если позже мы сделаем это:

И на экране отобразится “-1 кошка”, мы поймем, что переменной неверно было присвоено действительное значение.

Правило: Всегда присваивайте значения вашим переменным при их объявлении.

Мы обсудим переменные более подробно в следующем разделе.

cin

cin является противоположностью cout: в то время как cout выводит данные, cin считывает их из консоли. Теперь у вас есть общее представление о переменных, мы можем использовать cin, чтобы получить входные данные от пользователя и хранить их в переменной.

Попробуйте скомпилировать эту программу и запустить ее у себя. Когда вы запустите программу, она напечатает «Enter a number:» и будет ждать от вас ввода. После ввода числа( и нажатия клавиши Enter), она напечатает «You entered», а затем число, которое вы только что ввели.

Это простой способ получить входные данные от пользователя, и мы будем использовать его в дальнейшем во многих наших примерах.

Короткий тест

Какие значения отобразит в консоли эта программа?

Ответы на короткий тест

#1.[spoiler show=”Показать ответ:”]Программа выводит 3. Значением x – 2 является 3, которое присваивается х. [/spoiler]

#2.[spoiler show=”Показать ответ:”]Программа выводит 3. y присваивается значение x, которое равно 3. [/spoiler]

#3.[spoiler show=”Показать ответ:”]Программа выводит 6. Значением x + y является 6. [/spoiler]

#4.[spoiler show=”Показать ответ:”]Программа выводит 3. Значением x остается 3, потому что его значение не было переназначено. [/spoiler]

#5.[spoiler show=”Показать ответ:”]Вывод не определен. z – неинициализированная переменная. [/spoiler]


Вы так же можете ознакомиться с другими материалами по теме:


Оставить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *