Файл: Pobegaylo_A._C_Cplus_dlya_studenta.pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 13.12.2020

Просмотров: 4090

Скачиваний: 28

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Часть I. Язык программирования С 

36 

ратор  присваивания,  который  в  языке  программирования  C  обо-
значается  символом 

=

.  При  этом  в  правой  части  оператора  при-

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

  float  f = 3.14f; 
  double d = 3.14, g = f; 
  int    i, j = 10, k = j + 5; 

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

2.5. Фундаментальные типы данных 

Как  уже  говорилось  в  предыдущем  разделе,  язык  программиро-
вания C допускает преобразование типов данных. Для упрощения 
терминологии,  связанной  с  этим  вопросом,  встроенные  в  язык 
программирования C фундаментальные типы данных разбивают-
ся на три группы: интегральный тип, тип с плавающей точкой и 
пустой тип. 

Интегральный

 тип данных содержит все типы, спецификатор ко-

торых содержит хотя бы одно из ключевых слов 

char

short

int

 

или 

long

, исключая тип 

long

 

double

. Другими словами можно ска-

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

 плавающей точкой

 содержит типы 

float

double

 и 

long double

. В отличие от интегрального типа множество значе-

ний любого типа с плавающей точкой не является непрерывным. 


background image

Глава 2. Встроенные типы данных и переменные 

37 

Иногда  тип  с  плавающей  точкой  называют  просто 

плавающим

 

типом. 

Пустой

 тип данных содержит только тип данных 

void

, который в 

свою очередь не содержит ни одного значения. 
Интегральный тип и тип данных с плавающей точкой объединя-
ются в 

арифметический 

или 

числовой

 тип данных. 

2.6. Квалификаторы типов 

Квалификатор

  типа  данных  это  ключевое  слово,  которое  управ-

ляет  доступом  к  переменной.  Поэтому  квалификаторы  типов 
также  иногда  называются 

модификаторами  доступа

.  В  языке 

программирования C существует два квалификатора типов: 

const

 

и 

volatile

.  Квалификатор  типа  может  использоваться  как  перед 

спецификатором типа, так и после него. 
Квалификатор 

const

  говорит  компилятору  о  том,  что  идентифи-

катор является именем константы. Поэтому такую константу час-
то  также  называют 

именованной  константой

.  Значение  имено-

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

  const int i = 1; 

Константа  именуется  для  упрощения  модификации  программы 
в случае изменения значения этой константы. 
Квалификатор 

volatile

 говорит компилятору о том, что значение 

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

volatile

  гарантирует,  что  все  программы 

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

volatile

,  то  может  возникнуть  сле-

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


background image

Часть I. Язык программирования С 

38 

граммы  фактически  будут  обращаться  к  разным  переменным. 
Поэтому  переменные,  объявленные  с  квалификатором 

volatile

всегда хранятся в памяти. Учитывая вышесказанное, такие пере-
менные часто также называют 

нестабильными 

или 

изменчивыми 

переменными. Приведем пример объявления нестабильной пере-
менной: 

  volatile int i = 1;

 

Отметим,  что  допустимо  совместное  использование  квалифика-
торов 

const

 и 

volatile

. Например: 

  volatile const int i = 1; 

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

 


background image

  

 
 

Г Л А В А  

 
 
 

Операторы и выражения 

 

3.1. L-value и R-value 

Данные в языке программирования C могут представляться лите-
ралами и переменными. И те и другие хранят значения данных в 
областях  памяти.  Это  хранимое  значение  данных  называется  
R-value, что является сокращением от английского названия read 
value — т. е. значение, которое можно прочитать. Фундаменталь-
ное  различие  между  литералами  и  переменными  заключается  в 
том, что переменная именует область памяти, в которой хранится 
R-value (т. е. фактически переменная представляет адрес этой об-
ласти),  а  литерал —  нет.  Значение  адреса  области  памяти  для 
хранения  значения  переменной  называется  L-value,  что  является 
сокращением  от  английского  названия  location  value,  т. е.  значе-
ние,  которое  определяет  местоположение.  Таким  образом,  пере-
менная определяет как R-value, так и L-value, а литерал определя-
ет только R-value. 
Понятия L-value и R-value вводятся для того, чтобы точнее опре-
делить, какие значения могут быть операндами операторов и ка-
кое значение получается в результате выполнения оператора. Так 
как L-value определяет адрес, то по этому адресу может быть за-
писано  новое  значение  переменной.  Литерал  же  не  может  полу-
чить  нового  значения.  Однако  отметим,  что  если  L-value  пред-
ставляет  именованную  константу,  то  по  этому  адресу  также  не 
может  быть  записано  новое  значение  данных.  Говорят,  что  

  

 


background image

Часть I. Язык программирования С 

40 

L-value  является 

модифицируемым

,  если  по  адресу,  определяе-

мому  этим  значением,  может  быть  записано  новое  значение  
данных. 

3.2. Арифметические операторы 

Над  данными  арифметического  типа  определены  следующие 

унарные

 операторы: 

 

+

 — знак числа не изменяется; 

 

-

 — изменение знака числа на противоположный знак. 

И 

бинарные

  операторы  (которые  также  называются 

арифме-

тическими

): 

 

+

 — сложение двух чисел; 

 

-

 — вычитание двух чисел; 

 

*

 — умножение двух чисел; 

 

/

 — деление двух чисел. 

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

  int x = 1, y = 2, z; 
  z = + x;       /* z = 1  */ 
  z = x + y;     /* z = 3  */ 
  z = - x;       /* z = -1 */ 
  z = x – y;     /* z = -1 */ 
  z = x * y;     /* z = 2  */ 
  z = x / y;     /* z = 0  */ 

Над  данными  интегрального  типа  также  определен  бинарный 
арифметический оператор: 

 

%

 — деления двух чисел по модулю, который дает в результате 

остаток от деления. 


Смотрите также файлы