Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник Моя первая программа на С++.docx
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
6 Мб
Скачать
☆

Присваивание значения

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

Числовым или символьным переменным (определение строк мы обсудим позже) значение может присваи- ваться при их определении:

main()

{

int count = 5; char initial = 'A'; float rate = 0.55;

}

В этих инструкциях мы определили целочисленную переменную count и присвоили ей начальное значение

  1. Далее мы определили символьную переменную initial, присвоив ей букву 'А' в качестве начального зна- чения, и переменную типа float с именем rate и начальным значением 0.55. Значение символьной пере- менной должно быть заключено в одинарные кавычки, а число с плавающей точкой должно иметь хотя бы по одному знаку слева и справа от точки.

Если переменная определена, можно присваивать ей значение в отдельной инструкции, используя опера- тор присваивания (=):

count = 5; initial = 'A'; rate = 0.55;

Присвоенное значение является начальным и может изменяться в процессе выполнения программы, иначе переменная не была бы переменной.

Если начальное значение переменной не известно заранее, то после начала выполнения программы оно может быть введено с клавиатуры, из дискового файла или получено в результате определенных вычис- лений. Со всеми этими способами вы познакомитесь чуть позже.

Определение строковой переменной

Рис. 3.10. Данные строкового типа в памяти

Как вы помните, язык Си не содержит строкового типа данных и не имеет никаких средств для работы со строками. К счастью, Си позволяет работать с данными строкового типа, используя массивы. Раньше мы уже определяли строку как ряд последовательных символов. Именно этим она и является— рядом сим- вольных переменных, объединенных в нечто, называемое массивом. Элементы строки хранятся вместе в последовательных элементах памяти. В качестве примера на рис.3.10 показано, как выглядит перемен- ная, имеющая значение "Привет". Каждая буква хранится в отдельном элементе памяти так же, как оди- ночная символьная переменная, но вся строка может быть выведена на экран монитора как единое целое при помощи одной функции puts(). Последовательность \0 является специальным символом, который Си вставляет после каждой строки. Он отмечает конец строки, указывая функции типа puts(), где следует прекратить вывод символов на экран.

Вы уже знаете как определить строковую константу— с помощью директивы #define, заключив символы строки в кавычки:

#Define client "Кейт Тиммонс"

Чтобы определить строковую переменную, необходимо использовать тип char и указать максимальное число символов, которое может содержать строка. Например, так:

char var_name[N];

где var_name означает имя переменной, а N— максимальное количество символов, которое всегда заклю- чается в квадратные скобки: прямую [ и обратную ].

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

char state[3];

Рис. 3.11. Определение строковой переменной

Рис. 3.12. Нельзя присвоить строковой переменной значение,имеющее большее количество символов, чем было для нее зарезервировано

при этом, как показано на рис.3.11, создается строковая переменная, которая называется state и содер- жит два символа, плюс нулевой символ, означающий конец строки (\0).

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

Почему это так важно, можно пояснить на следующем жизненном примере. Допустим, вы вводите пере- менную, содержащую имена клиентов. Вы определили ее следующим образом:

char client[10];

Программа работает безупречно до тех пор, пока вы не получаете заказ от господина Флаглехоффена. Когда вы попытаетесь ввести его имя в список, ваша программа остановится из-за ошибки выполнения, что иллюстрирует рис.3.12.

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

char client[80];

но если в программе будет несколько таких переменных, вы впустую потратите немало памяти компьюте- ра.

Определив строковую переменную, вы тут же можете инициализировать ее, присвоив ей начальное зна- чение в тексте программы. Помимо этого, значение можно присвоить, введя его с клавиатуры или из дис- кового файла, как это делается для переменных любого другого типа (подробнее о том, как вводить зна- чение строковой переменной с клавиатуры, вы узнаете в следующей главе). В языке Си нельзя присваи- вать значение строковой переменной так, как это сделано в примере:

¶a++ae æepcue u+uru æɵuyye+a sneuwpo++ɵu usgawenacwæou "Books-shop".

Pacupocwpa+e+ue, upogaua, uepesauuca ga++on u+uru unu ee ¬acwen 3AMPE[EHª.

O æcex +apyue+uex upoca6a coo6yawa uo agpecy piracy@books-shop.com

main()

{

char client[15]; client = "Кейт"; puts(client);

}

где употребляется не разрешенная инструкция

client = "Кейт";

Если вы хотите присвоить начальное значение строковой переменной, это можно сделать, определив ис- пользуемую переменную одним из двух допустимых

Рис. 3.13. Инициализация строки

способов. Вы можете присвоить значение определением переменной перед функцией main():

char client[] = "Флаглехоффен"; main()

{

puts(client);

}

Заметьте, что в этом случае значение максимального числа символов строковой переменной в квадратных скобках не проставлено. Максимальное число символов строковой переменной при таком способе опреде- ления зависит от используемого компилятора, но практически определяется количеством символов в на- чальном значении плюс один (рис.3.13). Заметим, что в качестве параметра функции puts() используется только имя переменной без каких-либо квадратных скобок.

Другой способ присваивания начального значения внутри функции main() несколько более сложен:

main()

{

static char greet[] = "Привет"; puts(greet);

}

Определение выполняется внутри функции main(), но начинается со слова static, а переменная называет- ся статической. Определяемая таким образом переменная может быть использована только внутри функ- ции, в теле которой она была определена. Если вы желаете присвоить начальное значение строковой пе- ременной, определяемой внутри функции, то ее следует определить как статическую переменную (под- робнее смотри в главе 7).