Раберем типы переменных в C.
Их не много, это символ, он же байт - char принимает значения от 0..255 (или -127 .. +127)
Целочисленное - int - значения целые числа
С плавающей точкой - float
С двойной точностью - double
Тип данных float практически не используется в современном программировании.
Существуют несколько префиксов к типам данных, например знаковость это signed и unsgined.
По умолчанию переменные знаковые (signed), хотя такая запись не будет ошибочной
signed int a
В чем различия? В диапазоне принимаемых значений в случае знака это от - до +, в беззнаковом случае(unsigned) от 0 до максимального значения.
Максимальное значение для char это 255 (емкость - 28) , а для int (емкость 232) - в 32 битных системах, в 64 - соотвественно 264, а я помню еще времена когда в int можно было загнать только до 216.
Размер памяти выделяемый для каждой переменной, естественно кратный ее максимальному значению (или наоборот - тут спор как про яйцо и курицу), для char - 1 байт, для int (32) - 4 байта.
Для float - 4 байта, для double - 8 байт.
Также есть префиксы изменяющие размер данных - это short и long
Но не все варианты возможны, скажем для char и float нельзя указывать такой префикс.
Можно только для int и double. Т.к. long float это и есть double, а long char - это наверное int.
Так вот short int - это слово (два байта), т.е. максимальное значение 216
Для long int в bcc и gcc - размер равен что и просто int - двойное слово (четыре байта).
Однако для некоторых компиляторов - long int это int64 - 8 байт.
Вариантам short double тоже несуществует, однако есть long double.
Кстати в разных компиляторах это разные размеры данных. В bcc - 10 байт, а в gcc - 12 байт (на 32битной платформе).
По поводу signed/unsigned - тут стоит заметить что переполнение емкости данных, ведет к разным значениям в зависимости от signed.
Например
unsined char a = 255; a+=2
, "a" будет равна 1. А char a = 127; a+=2
, "a" будет равна -127.Эта нехитрая ошибка приводит к большому количеству багов и глюков множества программ.
А как же строки, спросит тот редкий читатель, что увидел этот текст.
Все просто - строка это массив символов. Размерность массива указывается в квадратных скобках после имени переменной
Например
int a[50];
- целочисленный массив, с 50 элементами. Для доступа к конкретному элементу в квадратных скобках указывается его индекс int b= a[5];
.Массивы можно инициализировать сразу при описании, например
int a[5] = {1,2,3};
, значения указывается через запятую в фигурных скобках. Значений может быть меньше чем размерность массива, но не больше!Также и строки
char str[10] = {'H','e','l','l','o','!',\0};
. Символы указывается в апострофах, и в ковычках может быть только один символ.
char a='aa';//ошибка!!!
Но гораздо легче и проще инициализировать строки (а также использовать их для других целей) через строку заключенную в двойные кавычки
char str[10] = "Hello!";
.Следует заметить, что 0-символ ставится автоматически.
Т.е.
char str[6]="Hello!";
- не сработает, скажет что размер массива меньше чем количество инициализируемых элементов.Т.е. "Hello!" автоматически преобразуется в {'H','e','l','l','o','!',\0}
Подпишись на обновления блога - будь в курсе
Комментариев нет:
Отправить комментарий