Foreversoft.ru

IT Справочник
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Char в си что это

Типы данных в языке Си

Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и способ реализации хранения значений и выполнения операций.

Процесс проверки и накладывания ограничений на типы используемых данных называется контролем типов или типизацией программных данных . Различают следующие виды типизации:

  • Статическая типизация — контроль типов осуществляется при компиляции.
  • Динамическая типизация — контроль типов осуществляется во время выполнения.

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

Различают простые, составные и прочие типы данных.

Простые данные

Простые данные можно разделить на

  • целочисленные,
  • вещественные,
  • символьные
  • логические.

Составные (сложные) данные

  • Массив — индексированный набор элементов одного типа.
  • Строковый тип — массив, хранящий строку символов.
  • Структура — набор различных элементов (полей записи), хранимый как единое целое и предусматривающий доступ к отдельным полям структуры.

Другие типы данных

  • Указатель — хранит адрес в памяти компьютера, указывающий на какую-либо информацию, как правило — указатель на переменную.

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

Идентификатор — это последовательность, содержащая не более 32 символов, среди которых могут быть любые буквы латинского алфавита a — z, A — Z, цифры 0 — 9 и знак подчеркивания (_). Первый символ идентификатора не должен быть цифрой.

Несмотря на то, что допускается имя, имеющее до 32 символов, определяющее значение имеют только первые 8 символов. Помимо имени, все данные имеют тип. Указание типа необходимо для того, чтобы было известно, сколько места в оперативной памяти будет занимать данный объект.

Компилятор языка Си придерживается строгого соответствия прописных и строчных букв в именах идентификаторов и лексем.

ВерноНеверно
int a = 2, b;
b = a+3;
Int a=2; // правильно int
INT a=2;int a = 2, b;
b = A + 3; // идентификатор А не объявленint a = 2;
b = a + 3; // идентификатор b не объявлен

Целочисленные данные

Целочисленные данные могут быть представлены в знаковой и беззнаковой форме.

Беззнаковые целые числа представляются в виде последовательности битов в диапазоне от 0 до 2 n -1, где n-количество занимаемых битов.

Знаковые целые числа представляются в диапазоне -2 n-1 …+2 n-1 -1. При этом старший бит данного отводится под знак числа (0 соответствует положительному числу, 1 – отрицательному).

Основные типы и размеры целочисленных данных:

Количество битБеззнаковый типЗнаковый тип
8unsigned char
0…255
char
-128…127
16unsigned short
0…65535
short
-32768…32767
32unsigned intint
64unsigned long intlong int

Вещественные данные

Вещественный тип предназначен для представления действительных чисел. Вещественные числа представляются в разрядной сетке машины в нормированной форме.

Нормированная форма числа предполагает наличие одной значащей цифры (не 0) до разделения целой и дробной части. Такое представление умножается на основание системы счисления в соответствующей степени. Например, число 12345,678 в нормированной форме можно представить как

12345,678 = 1,2345678·10 4

Число 0,009876 в нормированной форме можно представить как

0,009876 = 9,876·10 -3

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

Значащие разряды числа, стоящие в нормированной форме после разделителя целой и дробной части, называются мантиссой числа .

В общем случае вещественное число в разрядной сетке вычислительной машины можно представить в виде 4 полей.

  • знак — бит, определяющий знак вещественного числа (0 для положительных чисел, 1 — для отрицательных).
  • степень — определяет степень 2, на которую требуется умножить число в нормированной форме. Поскольку степень 2 для числа в нормированной форме может быть как положительной, так и отрицательной, нулевой степени 2 в представлении вещественного числа соответствует величина сдвига, которая определяется как

2 n -1,

где n — количество разрядов, отводимых для представления степени числа.

  • целое — бит, который для нормированных чисел всегда равен 1, поэтому в некоторых представлениях типов этот бит опущен и принимается равным 1.
  • мантисса — значащие разряды представления числа, стоящие после разделителя целой и дробной части в нормированной форме.
  • Различают три основных типа представления вещественных чисел в языке Си:

    ТипОбозна-
    чение в Си
    Кол-во битБиты степениМантиссаСдвиг
    простоеfloat3230…2322…0127
    двойной точностиdouble6462…5251…01023
    двойной расширен- ной точностиlong double8078…6462…016383

    Как видно из таблицы, бит целое у типов float и double отсутствует. При этом диапазон представления вещественного числа состоит из двух диапазонов, расположенных симметрично относительно нуля. Например, диапазон представления чисел типа float можно представить в виде:

    Пример : представить число -178,125 в 32-разрядной сетке (тип float ).

    Для представления числа в двоичной системе счисления преобразуем отдельно целую и дробную части:

    178,12510 = 10110010,0012=1,0110010001·2 111

    Для преобразования в нормированную форму осуществляется сдвиг на 7 разрядов влево).

    Для определения степени числа применяем сдвиг:

    0111111+00000111 = 10000110.

    Таким образом, число -178,125 представится в разрядной сетке как

    Символьный тип

    Символьный тип хранит код символа и используется для отображения символов в различных кодировках. Символьные данные задаются в кодах и по сути представляют собой целочисленные значения. Для хранения кодов символов в языке Си используется тип char .
    Подробнее о кодировке символов

    Логический тип

    Логический тип применяется в логических операциях, используется при алгоритмических проверках условий и в циклах и имеет два значения:

    В программе должно быть дано объявление всех используемых данных с указанием их имени и типа. Описание данных должно предшествовать их использованию в программе.

    Что означает char **s на языке Си?

    Указатель на указатель.

    Используется…
    1. Для многомерных массивов (в Си нечасто — ведь есть настоящие многомерные массивы; обычно в структурах посложнее, чем тупой массив M×N). Вот у меня есть самодельный (неполный) аналог std::deque (динамический массив, состоящий из кусочков и никогда ничего не перемещающий). Там внутри std::vector , который служит массивом массивов. А у вектора внутри — T**.
    2. Для массивов (1-е измерение) строк (2-е измерение).
    3. Для передачи указателя по указателю (см. описание функции strtod).
    4. (Крайне редко) И просто как указатель на указатель

    char* — это по соглашению Си-строка, то есть указатель на буфер символов, оканчивающийся нулевым байтом ‘’.

    slavapegaskin: code ставь в угловых скобках, а не квадратных.

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

    В частности функция scmp(), которую ты привёл, — это классический вариант функции сравнения, пригодной для подачи в стандартную функцию qsort() языка C. Функция qsort() сделана в общем виде, поэтому может сортировать любые объекты (строки, числа, структуры, указатели и другие вещи). Но чтобы сортировать эти объекты, ей нужна функция сравнения, которая знает, как определить какой объект больше какого, какой объект меньше какого и какие объекты вообще считаются равными. Поэтому пишется такая функция сравнения, которая подаётся (указатель на функцию) в функцию qsort(), которая уже внутри в эту функцию сравнения подаёт каждые два объекта, чтобы сравнить их. Но так как объекты неизвестные, то подаёт она просто указатели на них в виде указателей на void, а дальше функция сравнения внутри себя уже превращает их из неизвестных объектов в известные, сравнивает между собой и возвращает обратно в qsort() результат этого сравнения, по которому qsort() понимает, нужно ли переставлять эти неизвестные для неё объекты (у них известны только адреса и размер).

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

    AVR GCC :: ПЕРЕМЕННЫЕ И КОНСТАНТЫ

    Переменные

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

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

    Хорошим стилем является осмысленное именование переменных. Разрешается использовать строчные и прописные буквы, цифры и символ подчёркивания, который в Си считается буквой. Первым символом обязательно должна быть буква, в имени переменной не должно быть пробелов. В современных версиях компиляторов длина имени практически не ограничена. Имя переменной не может совпадать с зарезервированными ключевыми словами. Заглавные и строчные буквы в именах переменных различаются, переменные a и A — разные переменные.

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

    При объявлении переменной компилятор отводит ей место в памяти в зависимости от её типа. Стандартными средствами AVR GCC работает с типами данных char (символьный тип) и int (целочисленный тип).

    Типы переменных

    char — является самым экономным типом. Тип char может быть знаковым и беззнаковым. Обозначается, соответственно, как » signed char » (знаковый тип) и » unsigned char » (беззнаковый тип). Знаковый тип может хранить значения в диапазоне от -128 до +127. Беззнаковый — от 0 до 255. Под переменную типа char отводится 1 байт памяти (8 бит).

    Ключевые слова (модификаторы) signed и unsigned указывают, как интерпретируется нулевой бит объявляемой переменной, т.е., если указано ключевое слово unsigned, то нулевой бит интерпретируется как часть числа, в противном случае нулевой бит интерпретируется как знаковый.

    Целочисленная величина int может быть short (короткой) или long (длинной).

    Ключевое слово (модификатор) short ставится после ключевых слов signed или unsigned . Таким образом, различают следующие типы: signed short int, unsigned short int, signed long int, unsigned long int .

    Переменная типа signed short int (знаковая короткая целая) может принимать значения от -32768 до +32767, unsigned short int (беззнаковая короткая целая) — от 0 до 65535. Под каждую из них отводится ровно по два байта памяти (16 бит).

    При объявлении переменной типа signed short int ключевые слова signed и short могут быть пропущены, и такой тип переменной может быть объявлен просто int . Допускается и объявление этого типа одним ключевым словом short .

    Переменная unsigned short int может быть объявлена как unsigned int или unsigned short .

    Под каждую величину signed long int или unsigned long int отводится 4 байта памяти (32 бита). Значения переменных этого типа могут находиться в интервалах от -2147483648 до 2147483647 и от 0 до 4294967295 соответственно.

    Существуют также переменные типа long long int , для которых отводится 8 байт памяти (64 бита). Они также могут быть знаковыми и беззнаковыми. Для знакового типа диапазон значений лежит в пределах от -9223372036854775808 до 9223372036854775807, для беззнакового — от 0 до 18446744073709551615. Знаковый тип может быть объявлен и просто двумя ключевыми словами long long .

    ТипДиапазонШестнадцатиричный диапазонРазмер
    unsigned char0 . 2550x00 . 0xFF8 bit
    signed char
    или просто
    char
    -128 . 127-0x80 . 0x7F8 bit
    unsigned short int
    или просто
    unsigned int или unsigned short
    0 . 655350x0000 . 0xFFFF16 bit
    signed short int или signed int
    или просто
    short или int
    -32768 . 327670x8000 . 0x7FFF16 bit
    unsigned long int
    или просто
    unsigned long
    0 . 42949672950x00000000 . 0xFFFFFFFF32 bit
    signed long
    или просто
    long
    -2147483648 . 21474836470x80000000 . 0x7FFFFFFF32 bit
    unsigned long long0 . 184467440737095516150x0000000000000000 . 0xFFFFFFFFFFFFFFFF64 bit
    signed long long
    или просто
    long long
    -9223372036854775808 . 92233720368547758070x8000000000000000 . 0x7FFFFFFFFFFFFFFF64 bit

    Объявление переменных

    Переменные объявляют в операторе описания. Оператор описания состоит из спецификации типа и списка имён переменных, разделённых запятой. В конце обязательно должна стоять точка с запятой.

    Объявление переменной имеет следующий формат:

    [модификаторы] спецификатор_типа идентификатор [, идентификатор] .

    Модификаторы — ключевые слова signed , unsigned , short , long .
    Спецификатор типа — ключевое слово char или int , определяющее тип объявляемой переменной.
    Идентификатор — имя переменной.

    Пример:
    Таким образом, будут объявлены переменные x , a , b , c , y . В переменную x можно будет записывать значения от -128 до 127. В переменные a , b , c — от -32768 до +32767. В переменную y — от 0 до 18446744073709551615.

    Инициализация значения переменной при объявлении

    При объявлении переменную можно проинициализировать, то есть присвоить ей начальное значение. Сделать это можно следующим образом. Таким образом, в переменную x при объявлении сразу же будет записано число 100.

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

    Константы

    Переменная любого типа может быть объявлена как немодифицируемая. Это достигается добавлением ключевого слова const к спецификатору типа. Переменные с типом const представляют собой данные, используемые только для чтения, то есть этой переменной не может быть присвоено новое значение. Если после слова const отсутствует спецификатор типа, то константы рассматриваются как величины со знаком, и им присваивается тип int или long int в соответствии со значением константы: если константа меньше 32768, то ей присваивается тип int , в противном случае long int .

    Присваивание

    Для присваивания в Си служит знак «=». Выражение, стоящее справа от знака присваивания, вычисляется, и полученное значение присваивается переменной, стоящей слева от знака присваивания. При этом предыдущее значение, хранящееся в переменной, стирается и заменяется на новое.

    Оператор «=» не следует понимать как равенство.
    Например, выражение a = 5; следует читать как «присвоить переменной a значение 5».

    Примеры:
    В правой части значение переменной может использоваться несколько раз:

    Арифметические операции

    Арифметические операции записываются в выражениях следующим образом:

    +плюс
    минус
    *умножить
    /разделить

    Пример:
    Таким образом, в переменной z будет храниться число 23

    Дополнительные способы присваивания

    Кроме простого оператора присваивания «=», в Си существует еще несколько комбинированных операторов присваивания: «+=», «-=», «*= Инкремент и декремент

    Если необходимо изменить значение переменной на 1, то используют инкремент или декремент .

    Инкремент — операция увеличения значения, хранящегося в переменной, на 1.

    Пример:
    Декремент — операция уменьшения значения, хранящегося в переменной, на 1.

    Пример:
    Инкремент и декремент относятся к операциям присваивания. При использовании декремента и инкремента совместно с оператором присваивания «=» применяют постфиксную (x++) или префиксную (++x) запись. Первой выполняется префиксная запись.

    Примеры:
    Предположим, что в переменной x хранилось значение 5. Тогда в y будет записано значение 5, после чего значение переменной x будет увеличено на 1. Таким образом, в y будет 5, а в x — 6.
    Если в x хранилось значение 5, то сначала будет выполнено уменьшение x до 4, а затем это значение будет присвоено переменной y . Таким образом, x и y будет присвоено значение 4.

    Переменные

    Переменные

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

    autodoubleintstruct
    breakelselongswitch
    registertypedefcharextern
    returnvoidcasefloat
    unsigneddefaultforsigned
    uniondoifsizeof
    volatilecontinueenumshort
    whileinline

    А также ряд других слов, специфичных для данной версии компилятора, например far, near, tiny, huge, asm, asm_ и пр.

    Например, правильные идентификаторы
    a, _, _1_, Sarkasm, a_long_variable, aLongVariable, var19, defaultX, char_type
    неверные
    1a, $value, a-long-value, short

    Си — регистрозависимый язык. Переменные с именами a и A, или end и END, или perfectDark и PerfectDarK – это различные переменные.

    Типы переменных

    Т ип переменной определяет

    • 1) Размер переменной в байтах (сколько байт памяти выделит компьютер для хранения значения)
    • 2) Представление переменной в памяти (как в двоичном виде будут расположены биты в выделенной области памяти).

    В си несколько основных типов. Разделим их на две группы — целые и числа с плавающей точкой.

    Целые

    • char — размер 1 байт. Всегда! Это нужно запомнить.
    • short — размер 2 байта
    • int — размер 4 байта
    • long — размер 4 байта
    • long long — размер 8 байт.

    Здесь следует сделать замечание. Размер переменных в си не определён явно, как размер в байтах. В стандарте только указано, что

    Указанные выше значения характерны для компилятора VC2012 на 32-разрядной машине. Так что, если ваша программа зависит от размера переменной, не поленитесь узнать её размер.

    Теперь давайте определим максимальное и минимальное число, которое может хранить переменная каждого из типов. Числа могут быть как положительными, так и отрицательными. Отрицательные числа используют один бит для хранения знака. Иногда знак необходим (например, храним счёт в банке, температуру, координату и т.д.), а иногда в нём нет необходимости (вес, размер массива, возраст человека и т.д.). Для этого в си используется модификатор типа signed и unsigned. unsigned char — все 8 бит под число, итого имеем набор чисел от 00000000 до 11111111 в двоичном виде, то есть от 0 до 255 signed char от -128 до 128. В си переменные по умолчанию со знаком. Поэтому запись char и signed char эквивалентны.

    Таб. 1 Размер целых типов в си.

    ТипРазмер, байтМинимальное значениеМаксимальное значение
    unsigned char1255
    signed char
    ( char )
    1-128127
    unsigned short265535
    signed short
    ( short )
    2-3276832767
    unsigned int
    ( unsigned )
    44294967296
    signed int
    ( int )
    4-21474836482147483647
    unsigned long44294967296
    signed long
    ( long )
    4-21474836482147483647
    unsigned long long818446744073709551615
    signed long long
    ( long long )
    8-92233720368547758089223372036854775807

    sizeof

    В си есть оператор, который позволяет получить размер переменной в байтах. sizeof переменная, или sizeof(переменная) или sizeof(тип). Это именно оператор, потому что функция не имеет возможности получить информацию о размере типов во время выполнения приложения. Напишем небольшую программу чтобы удостовериться в размерах переменных.

    (Я думаю ясно, что переменные могут иметь любое валидное имя). Эту программу можно было написать и проще

    В си один и тот же тип может иметь несколько названий
    short === short int
    long === long int
    long long === long long int
    unsigned int === unsigned

    Типы с плавающей точкой

    • float — 4 байта,
    • long float — 8 байт
    • double — 8 байт
    • long double — 8 байт.

    Здесь также приведены значения для VC2012, по стандарту размер типов float Таб. 2 Размер типов с плавающей точкой в си.

    ТипРазмер, байтКоличество значащих знаков мантиссыМинимальное значениеМаксимальное значениеfloat46-71.175494351 E – 383.402823466 E + 38double815-162.2250738585072014 E – 3081.7976931348623158 E + 308

    Переполнение переменных

    Си не следит за переполнением переменных. Это значит, что постоянно увеличивая значение, скажем, переменной типа int в конце концов мы «сбросим значение»

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

    Постфиксное обозначение типа

    П ри работе с числами можно с помощью литер в конце числа явно указывать его тип, например

    • 11 — число типа int
    • 10u — unsigned
    • 22l или 22L — long
    • 3890ll или 3890LL — long long (а также lL или Ll)
    • 80.0f или 80.f или 80.0F — float (обязательно наличие десятичной точки в записи)
    • 3.0 — число типа double

    Экспоненциальная форма записи также по умолчанию обозначает число типа double.

    Следующий код, однако, не будет приводить к ошибкам, потому что происходит неявное преобразование типа

    Шестнадцатеричный и восьмеричный формат

    В о время работы с числами можно использовать шестнадцатеричный и восьмеричный формат представления. Числа в шестнадцатиричной системе счисления начинаются с 0x, в восьмеричной системе с нуля. Соответственно, если число начинается с нуля, то в нём не должно быть цифр выше 7:

    Экспоненциальная форма представления чисел

    Э кспоненциальной формой представления числа называют представление числа в виде M e ± p , где M — мантиса числа, p — степень десяти. При этом у мантисы должен быть один ненулевой знак перед десятичной запятой.
    Например 1.25 === 1.25e0, 123.5 === 1.235e2, 0.0002341 === 2.341e-4 и т.д.
    Представления 3.2435e7 эквивалентно 3.2435e+7
    Существеут и другое представление («инженерное»), в котором степень должна быть кратной тройке. Например 1.25 === 1.25e0, 123.5 === 123.5e0, 0.0002341 === 234.1e-6, 0.25873256 === 258.73256e-3 и т.д.

    Объявление переменных

    В си переменные объявляются всегда в начале блока (блок — участок кода ,ограниченный фигурными скобками)

    При объявлении переменной пишется её тип и имя.

    Можно объявить несколько переменных одного типа, разделив имена запятой

    Здесь объявлены переменные a и b внутри функции main, и переменная z внутри тела цикла. Следующий код вызовет ошибку компиляции

    Это связано с тем, что объявление переменной стоит после оператора присваивания. При объявлении переменных можно их сразу инициализировать.
    int i = 0;
    При этом инициализация при объявлении переменной не считается за отдельный оператор, поэтому следующий код будет работать

    Начальное значение переменной

    О чень важно запомнить, что переменные в си не инициализируются по умолчанию нулями, как во многих других языках программирования. После объявления переменной в ней хранится «мусор» — случайное значение, которое осталось в той области памяти, которая была выделена под переменную. Это связано, в первую очередь, с оптимизацией работы программы: если нет необходимости в инициализации, то незачем тратить ресурсы для записи нулей (замечание: глобальные переменные инициализируются нулями, почему так, читайте в этой статье).

    Если выполнять эту программу на VC, то во время выполнения вылетит предупреждение
    Run-Time Check Failure #3 — The variable ‘i’ is being used without being initialized.
    Если нажать «Продолжить», то программа выведет «мусор». В многих других компиляторах при выполнении программы не будет предупреждения.

    Область видимости переменной

    П еременные бывают локальными (объявленными внутри какой-нибудь функции) и глобальными. Глобальная переменная видна всем функциям, объявленным в данном файле. Локальная переменная ограничена своей областью видимости. Когда я говорю, что переменная «видна в каком-то месте», это означает, что в этом месте она определена и её можно использовать. Например, рассмотрим программу, в которой есть глобальная переменная

    Будет выведено
    foo: 100
    bar: 333
    Здесь глобальная переменная global видна всем функциям. Но аргумент функции затирает глобальную переменную, поэтому при передаче аргумента 333 выводится локальное значение 333.
    Вот другой пример

    Программа выведет 555. Также, как и в прошлом случае, локальная переменная «важнее». Переменная, объявленная в некоторой области видимости не видна вне её, например

    Этот пример не скомпилируется, потому что переменная y существует только внутри своего блока.
    Вот ещё пример, когда переменные, объявленные внутри блока перекрывают друг друга

    Программа выведет
    30
    20
    10
    Глобальных переменных необходимо избегать. Очень часто можно услышать такое. Давайте попытаемся разобраться, почему. В ваших простых проектах глобальные переменные выглядят вполне нормально. Но представьте, что у вас приложение, которое

    • 1) Разрабатывается несколькими людьми и состоит из сотен тысяч строк кода
    • 2) Работает в несколько потоков

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

    Безусловно, есть ситуации, когда глобальные переменные упрощают программу, но такие ситуации случаются не часто и не в ваших домашних заданиях, так что НЕ СОЗДАВАЙТЕ ГЛОБАЛЬНЫХ ПЕРЕМЕННЫХ!
    Переменные могут быть не только целочисленными и с плавающей точкой. Существует множество других типов, которые мы будем изучать в дальнейшем.

    Читать еще:  Списки си шарп
    Ссылка на основную публикацию
    Adblock
    detector