Одной из самых мощных функций программирования на C являются «Типы данных». Типы данных можно использовать с переменными и функциями для определения типа данных, которые они могут хранить. Данные могут быть некоторым значением или символом. Это также может быть набор значений или набор символов. C предлагает широкий спектр типов данных, каждый из которых может иметь уникальный тип данных и определенный предопределенный диапазон. В этой статье мы обсудим все, что касается типов данных.
Типы данных в программировании на C в основном делятся на 2 типа: первичные типы данных и производные типы данных.
char: один байт, способный содержать один символ в локальном наборе символов int: целое число, обычно отражающее естественный размер целых чисел на хост-компьютере float: одинарная точность с плавающей запятой double: с плавающей запятой двойной точности
Кроме того, к этим основным типам можно применить ряд квалификаторов. short и long применяются к целым числам: short int sh; long int counter;
*В таких объявлениях слово int может быть опущено, что обычно и происходит.
Основные типы данных перечислены ниже:
Тип
Размер (в байтах)
Диапазон
char или знаковый символ
1
-128 до +127
беззнаковый символ
1
от 0 до 255
целое число или целое число со знаком
2
-32 768 до +32767
< /tr>
беззнаковое целое
2
от 0 до 65535
короткое целое или короткое целое со знаком< /td>
2
-32,768 до +32767
короткое целое без знака
2
0 до 65535
длинное целое или длинное целое со знаком
4
-2 147 483 648 до +2 147 483 647
tr>
длинное целое без знака
4
от 0 до +4 294 967 295
число с плавающей запятой
< td>4
3.4E-38 до 3.4E+38
двойной
8
1,7 E-308 до 1.7E+308
длинный двойной
10
3.4E-4932 до 1.1E+4932
тд>
таблица>
Размер типа данных зависит от компилятора, как и диапазон. Однако код, скомпилированный компилятором, предназначен для определенного типа микропроцессора или микроконтроллера. Один компилятор может поддерживать несколько процессоров (или целей), и в зависимости от выбранной цели компилятор определяет размер типов данных. Короче говоря, размер типа данных зависит от компилятора и целевого процессора, для которого компилятор генерирует код.
В приведенной выше таблице предполагается, что компилятор является 16-разрядным или генерирует код для 16-разрядного целевого процессора. Обычно целое число будет естественным размером для конкретной машины (или процессора). В приведенной выше таблице целое число имеет ширину 2 байта (или 16 бит), поэтому компилятор также имеет ширину 2 байта или 16 бит. Если бы компилятор имел ширину 32 бита, размер типа int был бы 4 байта (32 бита). Однако это может происходить не каждый раз. Возможно, что размер целого числа составляет 4 байта (32 бита) для 64-битного процессора. Все зависит от компилятора.
Примеры целочисленных типов данных:
Размер char (со знаком или без знака) всегда равен 1 байту независимо от компилятора. Знаковый тип символа может содержать отрицательные значения и, следовательно, определяется в диапазоне от -128 до +127. Тип символа без знака может содержать только положительные значения и, следовательно, определен в диапазоне от 0 до 255. Тип данных символа может хранить символ ASCII или эквивалентное число этого символа ASCII.
Размер короткого целого числа (со знаком или без знака) часто составляет 2 байта для большинства компиляторов.
Размер длинного целого числа (со знаком или без знака) зависит от компилятора. Обычно это 4 байта (32 бита) для 16/32-битного компилятора, но он может варьироваться от компилятора к компилятору.
Стандарт C не устанавливает каких-либо ограничений по размеру для типов данных, кроме символов. Согласно определению C:
«Каждый компилятор может свободно выбирать подходящие размеры для своего оборудования, с учетом только того ограничения, что короткие и целые должны быть не менее 16 бит, длинные — не менее 32 бит, а короткие — не длиннее, чем int. , который не длиннее длинного».
Вот пример использования типов данных в C. Приведенный ниже код написан и скомпилирован в Visual Studio. ОС является 32-разрядной, а целевой процессор — Intel i-3 5005U.
Вывод для вышеуказанной программы:
Чем отличается диапазон для подписанных и неподписанных типов?
Хотя размер любого типа данных со знаком и без знака одинаков, они имеют различный диапазон значений, которые могут храниться в переменных. Почему так?
Числа со знаком обычно представлены в форме дополнения до 2 на вашем компьютере или процессоре. Например, целое число -23 будет представлено в форме дополнения до 2, как показано ниже:
23 (десятичное) 10111 (двоичное)
дополнение 1 к 10111: 1111111111111111111111111111111111111111111111111111111101000 (Количество единиц, добавленных перед фактическим числом, зависит от размера целевого процессора или машины. Дополнение до 1 — это не что иное, как инверсия фактического числа, то есть 1 преобразуется в 0, а 0 — в 1).
Вы можете выполнить те же расчеты на своем компьютерном калькуляторе и проверить результат.
Давайте возьмем пример символа со знаком, который может хранить числа от -128 до +127. Мы знаем, что символ (со знаком или без знака) может хранить только 8 бит данных.
01000010 (двоичный) 66 (десятичный)
Компьютер будет интерпретировать номера символов как:
Старший бит (1): знак числа [1: отрицательный, 0: положительный], биты 7-0: 1000010: фактические данные [66]
Это означает, что когда вы пытаетесь сохранить число, превышающее определенный диапазон, оно будет округлено в меньшую сторону. 66 получилось в результате 256-190 (256 — это максимальное значение, которое может хранить число без знака).
Возьмите другой пример. Как число -126 хранится в переменной символьного типа данных?
126 (десятичное) 01111110 (двоичное)
10000010 (двоичное) -126 (десятичное)
Чтобы проверить результат, выполните обратные вычисления. MSB равен 1, поэтому число отрицательное. Остальные 7 бит равны 0000010. Дополнение до 2 этого числа: ~0000010 = 1111101 = 126 (десятичное)
Сочетая знак и число, мы получаем результат: -126 (десятичное число)
Та же концепция применима и к целочисленным типам данных со знаком и без знака.
Подводя итог, можно сказать, что числа со знаком и числа без знака имеют одинаковый размер данных, определенный в C. Однако числа со знаком представлены в форме дополнения до 2, а старший бит двоичного числа представляет знак этого числа. Поскольку дополнительный 1 бит (двоичный 1) зарезервирован для идентификации числа как отрицательного, диапазон чисел со знаком уменьшается по сравнению с числами без знака.
Отрицательные числа обрабатываются вашим процессором, и вам не нужно заботиться об этом, кроме как убедиться, что вы присваиваете допустимое число в определенном диапазоне этой подписанной переменной. Если вы этого не сделаете, число будет просто усечено.
Типы данных с плавающей запятой
C определяет два основных типа данных для хранения дробных чисел или чисел с плавающей запятой. Они поплавковые и двойные. К типу double можно применить квалификатор long, создав таким образом другой тип, такой как long double.
1) С плавающей запятой одинарной точности (32-разрядная) 2) С плавающей запятой двойной точности (64-разрядная)
Представление чисел с плавающей запятой можно разделить на:
(a) Нормализованная форма: Давайте проиллюстрируем на примере. Предположим, что 32-битный шаблон 1 1000 0001 011 0000 0000 0000 0000 0000, где: S = 1 E = 1000 0001 F = 011 0000 0000 0000 0000 0000
В нормализованной форме фактическая дробь (или мантисса) нормализована с неявной ведущей единицей в форме 1.F. В этом примере фактическая дробь равна 1,011 0000 0000 0000 0000 0000 = 1 + 1×2^-2 + 1×2^-3 = 1,375D.
Бит знака представляет знак числа, где S=0 для положительного числа и S=1 для отрицательного числа. В этом примере с S=1 это отрицательное число, то есть -1,375D.
(b) Денормализованная форма У нормализованной формы есть серьезная проблема: с неявной первой единицей для дроби она не может представлять число ноль, поскольку число начинается с 1.
Денормализованная форма была разработана для представления нуля и других чисел. Для E=0 числа представлены в денормализованной форме. Неявный ведущий 0 (вместо 1) используется для дроби; и фактический показатель всегда равен -126. Следовательно, число ноль можно представить с помощью E=0 и F=0 (поскольку 0,0×2^-126=0).
Мы также можем представить очень маленькие положительные и отрицательные числа в денормализованной форме с E=0. Например, если S=1, E=0 и F=011 0000 0000 0000 0000 0000. Фактическая дробь равна 0,011=1×2^-2+1×2^-3=0,375D. Поскольку S=1, это отрицательное число. При E=0 фактический показатель степени равен -126. Следовательно, число равно -0,375×2^-126 = -4,4×10^-39, что является чрезвычайно малым отрицательным числом (близким к нулю).
Вывод: В итоге значение (N) рассчитывается следующим образом:
(a) Для 1 ≤ E ≤ 254 N = (-1)^S × 1.F × 2^(E-127). Эти числа находятся в так называемой нормализованной форме. Знаковый бит представляет знак числа. Дробная часть (1.F) нормализована с неявной ведущей единицей.Показатель степени представляет собой смещение (или превышение) 127, чтобы представлять как положительный, так и отрицательный показатель. Диапазон показателей степени: от -126 до +127.
(b) Для E = 0 N = (-1)^S × 0,F × 2^(-126). Эти числа находятся в так называемой денормализованной форме. Показатель степени 2^-126 дает очень маленькое число. Денормализованная форма необходима для представления нуля (с F=0 и E=0). Он также может представлять очень маленькое положительное и отрицательное число, близкое к нулю.
(c) Для E = 255 он представляет специальные значения, такие как ±INF (положительная и отрицательная бесконечность) и NaN (не число).
Производные типы данных: их также называют пользовательскими типами данных. Производные типы данных являются производными от первичного типа данных, но они могут хранить набор значений, а не одно значение.
Наиболее распространенными производными типами данных в C являются массивы, структуры, объединения и перечисления.
что такое тип данных WORD?
У меня было задание на уроке программирования сделать простую игру в угадайку (мы только начинаем программировать на C), и я прочитал этот код, который меняет цвет консоли:
Я знаю, что делает каждый бит, но хотел бы знать, что такое тип данных/структура WORD? (извините, если я использую неправильную терминологию, я только начинаю программировать, и это действительно весело)
Большое спасибо за помощь
WORD в среде Windows — это просто слово. Теперь определение слова — это некоторый тип данных, который составляет 16 бит (2 байта) для x86. Обычно псевдоним для краткости (гарантируется ТОЛЬКО в Windows!).
Первоначальное сообщение от Адак
io.h, безусловно, включен в некоторые современные компиляторы. Он больше не является частью стандарта C, но, тем не менее, включен в самые последние версии Pelles C.
Первоначальное сообщение от Салем
Вы имеете в виду, что он включен в качестве костыля, чтобы помочь древним программистам хромать без необходимости слишком многого заново учиться.
Вне мира DOS ваш заголовочный файл не имеет смысла.
Окей, спасибо. Значит, слово похоже на строку, которая может содержать только символы? (2 байта?) Спасибо за помощь
Нет, WORD — это просто 2-байтовый (беззнаковый) тип данных, вы можете использовать его для чего угодно.
Когда мы говорим о таких типах, как word, dword, qword и т. д., все они относятся к единице хранения или месту, где мы можем хранить не более n байтов (2, 4, 8 в данном случае соответственно). ). Что именно вы хотите хранить в них, зависит от вас, потому что для аппаратного обеспечения это все биты. Теперь все эти типы (обычно) представлены целочисленными типами (в данном случае short, int, long long соответственно).
Первоначальное сообщение от Адак
io.h, безусловно, включен в некоторые современные компиляторы. Он больше не является частью стандарта C, но, тем не менее, включен в самые последние версии Pelles C.
Первоначальное сообщение от Салем
Вы имеете в виду, что он включен в качестве костыля, чтобы помочь древним программистам хромать без необходимости слишком многого заново учиться.
Вне мира DOS ваш заголовочный файл не имеет смысла.
О, хорошо, теперь это начинает проясняться, Большое спасибо, Elysia и DeadPlanet, + ссылка тоже очень помогла
Слово – это размер данных, с которым процессор справляется естественным образом. Таким образом, для 32-разрядного процессора теоретически это 32 бита (или целое число), хотя процессоры x86 поддерживают 16 и 32 бита в равной степени через регистры *x и e*x.
Поскольку меньшие размеры данных должны быть дополнены для операций, на самом деле нет выигрыша в скорости от использования, например. байты против слов. Так что, вероятно, более удобно определять типы данных, которые имеют размер слова, а не размер байта - таким образом у вас будет гораздо больший диапазон целых чисел без ущерба для скорости. Поэтому в Windows есть DWORD (двойное слово) и QWORD (квадратичное слово), которые соответствуют 2 словам и 4 словам соответственно (или 16-битному длинному целому и длинному длинному целому).
Поскольку современный Windows API действительно появился в Windows '95, а это была 16-разрядная система, WORD был определен как 16-разрядная структура данных (на 16-разрядных процессорах int и short равны 8). биты как char). Отсюда и слово 16-битная Windows. И он застрял в win32, вероятно, из соображений совместимости.
РЕДАКТИРОВАТЬ: Не говоря уже о части 95-го года, 16-разрядная версия началась с DOS, но точка зрения по-прежнему актуальна.
Типы данных, поддерживаемые Windows, используются для определения возвращаемых функцией значений, параметров функций и сообщений, а также элементов структуры.Они определяют размер и значение этих элементов. Дополнительные сведения о базовых типах данных C/C++ см. в разделе Диапазоны типов данных.
В следующей таблице содержатся следующие типы: символ, целое число, логическое значение, указатель и дескриптор. Символьные, целочисленные и логические типы являются общими для большинства компиляторов C. Большинство имен указателей начинаются с префикса P или LP. Дескрипторы относятся к ресурсу, загруженному в память.
Дополнительную информацию об обработке 64-битных целых чисел см. в разделе Большие целые числа.
Дескриптор объекта.
Этот тип объявлен в WinNT.h следующим образом:
typedef PVOID HANDLE;
Этот тип объявлен в WinDef.h следующим образом:
typedef ХАНДЛЕ HBITMAP;
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HBRUSH;
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HCOLORSPACE;
Дескриптор диалога динамического обмена данными (DDE).
Этот тип объявлен в Ddeml.h следующим образом:
typedef HANDLE HCONV;
Описатель списка диалогов DDE.
Этот тип объявлен в Ddeml.h следующим образом:
typedef HANDLE HCONVLIST;
Этот тип объявлен в WinDef.h следующим образом:
определение типа HICON HCURSOR;
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HDC;
Описатель данных DDE.
Этот тип объявлен в Ddeml.h следующим образом:
typedef HANDLE HDDEDATA;
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HDDESK;
Описатель внутренней структуры перетаскивания.
Этот тип объявлен в ShellApi.h следующим образом:
typedef HANDLE HDROP;
Дескриптор отложенной структуры позиции окна.
Этот тип объявлен в WinUser.h следующим образом:
typedef HANDLE HDWP;
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HENHMETAFILE;
Этот тип объявлен в WinDef.h следующим образом:
typedef int HFILE;
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HFONT;
Описатель объекта GDI.
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HGDIOBJ;
Описатель блока глобальной памяти.
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HGLOBAL;
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HHOOK;
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HICON;
Дескриптор экземпляра. Это базовый адрес модуля в памяти.
HMODULE и HINSTANCE сегодня одинаковы, но представляют разные вещи в 16-разрядной версии Windows.
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HINSTANCE;
Описатель ключа реестра.
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HKEY;
Идентификатор языка ввода.
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HKL;
Описатель блока локальной памяти.
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HLOCAL;
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HMENU;
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HMETAFILE;
Дескриптор модуля. Базовый адрес модуля в памяти.
HMODULE и HINSTANCE одинаковы в текущих версиях Windows, но представляют разные вещи в 16-разрядной версии Windows.
Этот тип объявлен в WinDef.h следующим образом:
typedef HINSTANCE HMODULE;
Дескриптор монитора.
Этот тип объявлен в WinDef.h следующим образом:
if(WINVER >= 0x0500) typedef HANDLE HMONITOR;
Дескриптор палитры.
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HPPALETTE;
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HPEN;
Коды возврата, используемые интерфейсами COM. Дополнительные сведения см. в разделе Структура кодов ошибок COM. Чтобы проверить значение HRESULT, используйте макросы FAILED и SUCCEEDED.
Этот тип объявлен в WinNT.h следующим образом:
typedef ДЛИННЫЙ HRESULT;
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HRGN;
Дескриптор ресурса.
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HRSRC;
Описатель строки DDE.
Этот тип объявлен в Ddeml.h следующим образом:
typedef HANDLE HSZ;
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE WINSTA;
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE HWND;
32-битное целое число со знаком. Диапазон от -2147483648 до 2147483647 в десятичном формате.
Этот тип объявлен в WinDef.h следующим образом:
тип int INT;
Целочисленный тип со знаком для точности указателя. Используйте при приведении указателя к целому числу для выполнения арифметических операций с указателем.
Этот тип объявлен в BaseTsd.h следующим образом:
Этот тип объявлен в BaseTsd.h следующим образом:
typedef со знаком char INT8;
16-разрядное целое число со знаком.
Этот тип объявлен в BaseTsd.h следующим образом:
typedef со знаком короткого INT16;
32-битное целое число со знаком. Диапазон от -2147483648 до 2147483647 в десятичном формате.
Этот тип объявлен в BaseTsd.h следующим образом:
typedef со знаком int INT32;
64-битное целое число со знаком. Диапазон: от -9223372036854775808 до 9223372036854775807 в десятичном формате.
Этот тип объявлен в BaseTsd.h следующим образом:
typedef со знаком __int64 INT64;
Идентификатор языка. Дополнительную информацию см. в разделе Идентификаторы языка.
Этот тип объявлен в WinNT.h следующим образом:
typedef СЛОВО LANGID;
Идентификатор локали. Дополнительные сведения см. в разделе Идентификаторы локали.
Этот тип объявлен в WinNT.h следующим образом:
тип DWORD LCID;
Тип информации о локали. Список см. в разделе Информационные константы локали.
Этот тип объявлен в WinNls.h следующим образом:
тип DWORDLCTYPE;
Этот тип объявлен в WinNls.h следующим образом:
тип DWORD LGRPID;
32-битное целое число со знаком. Диапазон от -2147483648 до 2147483647 в десятичном формате.
Этот тип объявлен в WinNT.h следующим образом:
длинное определение типа LONG;
64-битное целое число со знаком. Диапазон: от -9223372036854775808 до 9223372036854775807 в десятичном формате.
Этот тип объявлен в WinNT.h следующим образом:
Длинный тип со знаком для точности указателя. Используйте при приведении указателя к типу long для выполнения арифметических действий с указателем.
Этот тип объявлен в BaseTsd.h следующим образом:
32-битное целое число со знаком. Диапазон от -2147483648 до 2147483647 в десятичном формате.
Этот тип объявлен в BaseTsd.h следующим образом:
typedef со знаком int LONG32;
64-битное целое число со знаком. Диапазон: от -9223372036854775808 до 9223372036854775807 в десятичном формате.
Этот тип объявлен в BaseTsd.h следующим образом:
typedef __int64 LONG64;
Параметр сообщения.
Этот тип объявлен в WinDef.h следующим образом:
typedef LONG_PTR LPARAM;
Этот тип объявлен в WinDef.h следующим образом:
typedef BOOL far *LPBOOL;
Этот тип объявлен в WinDef.h следующим образом:
typedef BYTE far *LPBYTE;
Этот тип объявлен в WinDef.h следующим образом:
тип DWORD *LPCOLORREF;
Этот тип объявлен в WinNT.h следующим образом:
typedef __nullterminated CONST CHAR *LPCSTR;
LPCWSTR, если определен UNICODE, иначе LPCSTR. Дополнительные сведения см. в разделе Типы данных Windows для строк.
Этот тип объявлен в WinNT.h следующим образом:
Указатель на константу любого типа.
Этот тип объявлен в WinDef.h следующим образом:
typedef CONST void *LPCVOID;
Указатель на постоянную строку 16-битных символов Unicode, заканчивающуюся нулем. Дополнительные сведения см. в разделе Наборы символов, используемые шрифтами.
Этот тип объявлен в WinNT.h следующим образом:
typedef CONST WCHAR *LPCWSTR;
Этот тип объявлен в WinDef.h следующим образом:
тип DWORD *LPDWORD;
Этот тип объявлен в WinDef.h следующим образом:
typedef HANDLE *LPHANDLE;
Этот тип объявлен в WinDef.h следующим образом:
тип int *LPINT;
Этот тип объявлен в WinDef.h следующим образом:
длинное определение типа *LPLONG;
Этот тип объявлен в WinNT.h следующим образом:
тип CHAR *LPSTR;
LPWSTR, если определен UNICODE, иначе LPSTR. Дополнительные сведения см. в разделе Типы данных Windows для строк.
Этот тип объявлен в WinNT.h следующим образом:
Указатель на любой тип.
Этот тип объявлен в WinDef.h следующим образом:
typedef void *LPVOID;
Этот тип объявлен в WinDef.h следующим образом:
наберите определение СЛОВО *LPWORD;
Указатель на заканчивающуюся нулем строку 16-битных символов Unicode. Дополнительные сведения см. в разделе Наборы символов, используемые шрифтами.
Этот тип объявлен в WinNT.h следующим образом:
тип WCHAR *LPWSTR;
Подписанный результат обработки сообщения.
Этот тип объявлен в WinDef.h следующим образом:
typedef LONG_PTR LRESULT;
Этот тип объявлен в WinDef.h следующим образом:
тип BOOL *PBOOL;
Этот тип объявлен в WinNT.h следующим образом:
typedef BOOLEAN *PBOOLEAN;
Этот тип объявлен в WinDef.h следующим образом:
typedef BYTE *PBYTE;
Этот тип объявлен в WinNT.h следующим образом:
тип CHAR *PCHAR;
Этот тип объявлен в WinNT.h следующим образом:
typedef CONST CHAR *PCSTR;
PCWSTR, если определен UNICODE, иначе PCSTR. Дополнительные сведения см. в разделе Типы данных Windows для строк.
Этот тип объявлен в WinNT.h следующим образом:
Указатель на постоянную строку 16-битных символов Unicode, заканчивающуюся нулем. Дополнительные сведения см. в разделе Наборы символов, используемые шрифтами.
Этот тип объявлен в WinNT.h следующим образом:
typedef CONST WCHAR *PCWSTR;
Этот тип объявлен в WinDef.h следующим образом:
тип DWORD *PDWORD;
Этот тип объявлен в WinNT.h следующим образом:
тип DWORDLONG *PDWORDLONG;
Этот тип объявлен в BaseTsd.h следующим образом:
тип DWORD_PTR *PDWORD_PTR;
Этот тип объявлен в BaseTsd.h следующим образом:
тип DWORD32 *PDWORD32;
Этот тип объявлен в BaseTsd.h следующим образом:
тип DWORD64 *PDWORD64;
Этот тип объявлен в WinDef.h следующим образом:
тип FLOAT *PFLOAT;
Этот тип объявлен в BaseTsd.h следующим образом:
Этот тип объявлен в WinNT.h следующим образом:
typedef HANDLE *PHANDLE;
Этот тип объявлен в WinDef.h следующим образом:
тип HKEY *PHKEY;
Этот тип объявлен в WinDef.h следующим образом:
тип int *PINT;
Этот тип объявлен в BaseTsd.h следующим образом:
typedef INT_PTR *PINT_PTR;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа INT8 *PINT8;
Этот тип объявлен в BaseTsd.h следующим образом:
typedef INT16 *PINT16;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа INT32 *PINT32;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа INT64 *PINT64;
Этот тип объявлен в WinNT.h следующим образом:
typedef PDWORD PLCID;
Этот тип объявлен в WinNT.h следующим образом:
typedef LONG *PLONG;
Этот тип объявлен в WinNT.h следующим образом:
определение типа LONGLONG *PLONGLONG;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа LONG_PTR *PLONG_PTR;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа LONG32 *PLONG32;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа LONG64 *PLONG64;
32-битный указатель. В 32-битной системе это собственный указатель. В 64-битной системе это усеченный 64-битный указатель.
Этот тип объявлен в BaseTsd.h следующим образом:
64-битный указатель. В 64-битной системе это собственный указатель. В 32-разрядной системе это 32-разрядный указатель с расширенным знаком.
Обратите внимание, что принимать состояние старшего бита указателя небезопасно.
Этот тип объявлен в BaseTsd.h следующим образом:
Подписанный указатель.
Этот тип объявлен в BaseTsd.h следующим образом:
Указатель без знака.
Этот тип объявлен в BaseTsd.h следующим образом:
Этот тип объявлен в WinNT.h следующим образом:
КРАТКОЕ определение типа *PSHORT;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа SIZE_T *PSIZE_T;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа SSIZE_T *PSSIZE_T;
Этот тип объявлен в WinNT.h следующим образом:
тип CHAR *PSTR;
Этот тип объявлен в WinNT.h следующим образом:
typedef TBYTE *PTBYTE;
Этот тип объявлен в WinNT.h следующим образом:
определение типа TCHAR *PTCHAR;
PWSTR, если определен UNICODE, иначе PSTR. Дополнительные сведения см. в разделе Типы данных Windows для строк.
Этот тип объявлен в WinNT.h следующим образом:
Этот тип объявлен в WinDef.h следующим образом:
typedef UCHAR *PUCHAR;
Этот тип объявлен в BaseTsd.h следующим образом:
Этот тип объявлен в WinDef.h следующим образом:
определение типа UINT *PUINT;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа UINT_PTR *PUINT_PTR;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа UINT8 *PUINT8;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа UINT16 *PUINT16;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа UINT32 *PUINT32;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа UINT64 *PUINT64;
Этот тип объявлен в WinDef.h следующим образом:
тип определения ULONG *PULONG;
Этот тип объявлен в WinDef.h следующим образом:
typedef ULONGLONG *PULONGLONG;
Этот тип объявлен в BaseTsd.h следующим образом:
typedef ULONG_PTR *PULONG_PTR;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа ULONG32 *PULONG32;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа ULONG64 *PULONG64;
Этот тип объявлен в WinDef.h следующим образом:
typedef USHORT *PUSHORT;
Указатель на любой тип.
Этот тип объявлен в WinNT.h следующим образом:
typedef недействительным *PVOID;
Этот тип объявлен в WinNT.h следующим образом:
определение типа WCHAR *PWCHAR;
Этот тип объявлен в WinDef.h следующим образом:
введите определение СЛОВА *PWORD;
Указатель на заканчивающуюся нулем строку 16-битных символов Unicode. Дополнительные сведения см. в разделе Наборы символов, используемые шрифтами.
Этот тип объявлен в WinNT.h следующим образом:
тип WCHAR *PWSTR;
64-битное целое число без знака.
Этот тип объявляется следующим образом:
typedef без знака __int64 QWORD;
Описатель базы данных диспетчера управления службами. Дополнительные сведения см. в разделе Обработчики SCM.
Этот тип объявлен в WinSvc.h следующим образом:
определение типа HANDLE SC_HANDLE;
Блокировка базы данных диспетчера управления службами. Дополнительные сведения см. в разделе Обработчики SCM.
Этот тип объявлен в WinSvc.h следующим образом:
тип определения LPVOID SC_LOCK;
Описатель значения статуса службы. Дополнительные сведения см. в разделе Обработчики SCM.
Этот тип объявлен в WinSvc.h следующим образом:
typedef HANDLE SERVICE_STATUS_HANDLE;
16-битное целое число. Диапазон: от -32768 до 32767 десятичных знаков.
Этот тип объявлен в WinNT.h следующим образом:
короткое определение типа SHORT;
Максимальное количество байтов, на которое может указывать указатель. Используйте для счетчика, который должен охватывать весь диапазон указателя.
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа ULONG_PTR SIZE_T;
Этот тип объявлен в BaseTsd.h следующим образом:
определение типа LONG_PTR SSIZE_T;
WCHAR, если определен UNICODE, иначе CHAR.
Этот тип объявлен в WinNT.h следующим образом:
WCHAR, если определен UNICODE, иначе CHAR.
Этот тип объявлен в WinNT.h следующим образом:
Этот тип объявлен в WinDef.h следующим образом:
typedef unsigned char UCHAR;
Неподписанный HALF_PTR. Используйте внутри структуры, содержащей указатель и два небольших поля.
Этот тип объявлен в BaseTsd.h следующим образом:
Неподписанный INT. Диапазон: от 0 до 4294967295 десятичных знаков.
Этот тип объявлен в WinDef.h следующим образом:
typedef unsigned int UINT;
Этот тип объявлен в BaseTsd.h следующим образом:
Этот тип объявлен в BaseTsd.h следующим образом:
typedef unsigned char UINT8;
Этот тип объявлен в BaseTsd.h следующим образом:
typedef беззнаковое короткое UINT16;
Неподписанный INT32. Диапазон: от 0 до 4294967295 десятичных знаков.
Этот тип объявлен в BaseTsd.h следующим образом:
typedef беззнаковое целое UINT32;
Неподписанный INT64. Диапазон: от 0 до 18446744073709551615 десятичных знаков.
Этот тип объявлен в BaseTsd.h следующим образом:
typedef ussigned __int 64 UINT64;
Неподписанный LONG. Диапазон: от 0 до 4294967295 десятичных знаков.
Этот тип объявлен в WinDef.h следующим образом:
typedef unsigned long ULONG;
64-битное целое число без знака. Диапазон: от 0 до 18446744073709551615 десятичных знаков.
Этот тип объявлен в WinNT.h следующим образом:
Этот тип объявлен в BaseTsd.h следующим образом:
Неподписанный LONG32. Диапазон: от 0 до 4294967295 десятичных знаков.
Этот тип объявлен в BaseTsd.h следующим образом:
typedef unsigned int ULONG32;
Неподписанный LONG64. Диапазон: от 0 до 18446744073709551615 десятичных знаков.
Этот тип объявлен в BaseTsd.h следующим образом:
typedef без знака __int64 ULONG64;
Строка Unicode.
Этот тип объявлен в Winternl.h следующим образом:
Неподписанный SHORT. Диапазон: от 0 до 65 535 десятичных знаков.
Этот тип объявлен в WinDef.h следующим образом:
typedef беззнаковое короткое USHORT;
Порядковый номер обновления (USN).
Этот тип объявлен в WinNT.h следующим образом:
typedef LONGLONG USN;
Этот тип объявлен в WinNT.h следующим образом:
16-битный символ Unicode. Дополнительные сведения см. в разделе Наборы символов, используемые шрифтами.
Этот тип объявлен в WinNT.h следующим образом:
typedef wchar_t WCHAR;
Соглашение о вызовах системных функций.
Этот тип объявлен в WinDef.h следующим образом:
CALLBACK, WINAPI и APIENTRY используются для определения функций с соглашением о вызовах __stdcall. Большинство функций Windows API объявляются с использованием WINAPI. Вы можете использовать CALLBACK для функций обратного вызова, которые вы реализуете, чтобы помочь идентифицировать функцию как функцию обратного вызова.
В этом руководстве вы узнаете об основных типах данных, таких как int, float, char и т. д., в программировании на C.
Видео: Типы данных в программировании на C
В программировании на C типы данных представляют собой объявления переменных. Это определяет тип и размер данных, связанных с переменными. Например,
Здесь myVar — это переменная типа int (целое число). Размер int составляет 4 байта.
Основные типы
Вот таблица, содержащая часто используемые типы в программировании на C для быстрого доступа.
Тип
Размер (в байтах)< /th>
Спецификатор формата
int
минимум 2, обычно 4 td>
%d , %i
char
1
%c
float
4
%f
двойной
8
%lf
короткий int
обычно 2
%hd
unsigned int
минимум 2, обычно 4
%u
long int
не менее 4, обычно 8
%ld , %li
long long int
не менее 8
%lld , %lli
unsigned long int
минимум 4
%lu
tr>
unsigned long long int
не менее 8
%llu
signed char
1
%c
беззнаковый символ
1
%c
long double
не менее 10, обычно 12 или 16
%Lf
Целые числа – это целые числа, которые могут принимать как нулевые, так и положительные и отрицательные значения, но не могут принимать десятичные значения. Например, 0 , -5 , 10
Мы можем использовать int для объявления целочисленной переменной.
Здесь id — это переменная целого типа.
В программировании на C можно объявить несколько переменных одновременно. Например,
Размер int обычно составляет 4 байта (32 бита). И он может принимать 2 32 различных состояния от -2147483648 до 2147483647 .
плавающее и двойное
float и double используются для хранения действительных чисел.
В C числа с плавающей запятой также могут быть представлены экспоненциально. Например,
В чем разница между float и double ?
Размер float (тип данных float одинарной точности) составляет 4 байта. А размер double (тип данных с плавающей запятой двойной точности) составляет 8 байт.
Ключевое слово char используется для объявления переменных символьного типа. Например,
Размер символьной переменной — 1 байт.
void — это неполный тип. Это означает «ничего» или «нет типа». Вы можете думать о пустоте как об отсутствующем.
Например, если функция ничего не возвращает, тип возвращаемого значения должен быть void .
Обратите внимание, что вы не можете создавать переменные типа void.
короткое и длинное
Если вам нужно использовать большое число, вы можете использовать спецификатор типа long . Вот как:
Здесь переменные a и b могут хранить целочисленные значения. Кроме того, c может хранить число с плавающей запятой.
Если вы уверены, что будет использоваться только небольшое целое число (диапазон [−32 767, +32 767]), вы можете использовать короткий .
Вы всегда можете проверить размер переменной с помощью оператора sizeof().
подписанный и неподписанный
В языке C signed и unsigned являются модификаторами типов. Вы можете изменить хранилище данных типа данных, используя их:
со знаком — позволяет хранить как положительные, так и отрицательные числа
без знака — позволяет хранить только положительные числа.
Здесь переменные x и num могут содержать только нулевые и положительные значения, поскольку мы использовали модификатор unsigned.
Учитывая, что размер int составляет 4 байта, переменная y может содержать значения от -2 31 до 2 31 -1 , тогда как переменная x может содержать значения от 0 до 2 32 -1 .
Производные типы данных
Типы данных, производные от фундаментальных типов данных, являются производными типами. Например: массивы, указатели, типы функций, структуры и т. д.