Jump to content

Типы данных C

(Перенаправлено с Stdbool.h )

В языке программирования C типы данных составляют семантику и характеристики хранения элементов данных. Они выражаются в синтаксисе языка в форме объявлений ячеек памяти или переменных . Типы данных также определяют типы операций или методы обработки элементов данных.

Язык C предоставляет базовые арифметические типы, такие как типы целых и действительных чисел , а также синтаксис для построения массивов и составных типов. Заголовки стандартной библиотеки C , которые будут использоваться через директивы include , содержат определения типов поддержки, которые имеют дополнительные свойства, такие как предоставление хранилища точного размера, независимо от реализации языка на конкретных аппаратных платформах. [1] [2]

Основные типы

[ редактировать ]

Основные типы

[ редактировать ]

Язык C предоставляет четыре основных спецификатора арифметических типов. чар , интервал , плавать и double и модификаторы подписано , без подписи , короткий и длинный . В следующей таблице перечислены допустимые комбинации при указании большого набора объявлений, зависящих от размера хранилища.

Тип Объяснение Минимальный размер (биты) Спецификатор формата Диапазон Суффикс десятичных констант
голец Наименьшая адресуемая единица машины, которая может содержать базовый набор символов. Это целочисленный тип. Фактический тип может быть как знаковым, так и беззнаковым. Он содержит биты CHAR_BIT. [3] 8 %c[ ЧАР_МИН , CHAR_MAX ]
подписанный символ Тот же размер, что и char , но гарантированно подписан. Способен содержать как минимум диапазон [-127, +127] . [3] [а] 8 %c[б] [ SCHAR_MIN , SCHAR_MAX ] [6]
беззнаковый символ Тот же размер, что и char , но гарантированно беззнаковый. Содержит как минимум диапазон [0, 255] . [7] 8 %c[с] [0, UCHAR_MAX ]
  • короткий
  • короткий интервал
  • подписано коротко
  • подписанное короткое целое число
Короткий целочисленный тип со знаком. Способен содержать как минимум диапазон [ −32 767 , +32 767 ] . [3] [а] 16 %hi или %hd[ SHRT_MIN , SHRT_MAX ]
  • беззнаковый короткий
  • беззнаковое короткое целое число
Короткий беззнаковый целочисленный тип. Содержит как минимум диапазон [ 0 , 65 535 ] . [3] 16 %hu[0, USHRT_MAX ]
  • интервал
  • подписано
  • подписанное целое число
Базовый целочисленный тип со знаком. Способен содержать как минимум диапазон [ −32 767 , +32 767 ] . [3] [а] 16 %i или %d[ INT_MIN , INT_MAX ] никто [8]
  • без подписи
  • беззнаковое целое число
Базовый целочисленный тип без знака. Содержит как минимум диапазон [ 0 , 65 535 ] . [3] 16 %u[0, UINT_MAX ] ты или В [8]
  • длинный
  • длинный интервал
  • подписан долго
  • подписанное длинное целое
длинным Целочисленный тип с знаком. Способен содержать как минимум диапазон [ −2 147 483 647 , +2 147 483 647 ] . [3] [а] 32 %li или %ld[ ДОЛГ_МИН , LONG_MAX ] л или л [8]
  • беззнаковый длинный
  • беззнаковое длинное целое число
Длинный беззнаковый целочисленный тип. Способен содержать как минимум диапазон [ 0 , 4 294 967 295 ] . [3] 32 %lu[0, ULONG_MAX ] оба ты или У и л или л [8]
  • долго долго
  • длинный длинный int
  • подписал долго долго
  • подписанный длинный длинный int
Длинный целочисленный тип со знаком. Способен содержать как минимум диапазон [ -9 223 372 036 854 775 807 , +9 223 372 036 854 775 807 ] . [3] [а] Указано начиная с C99 . версии стандарта 64 %lli или %lld[ SHIP_MIN , LLONG_MAX ] или LL [8]
  • беззнаковый длинный длинный
  • беззнаковый длинный длинный int
Длинный длинный беззнаковый целочисленный тип. Содержит как минимум диапазон [ 0 , 18 446 744 073 709 551 615 ] . [3] Указано начиная с C99 . версии стандарта 64 %llu[0, ULLONG_MAX ] оба ты или У и или LL [8]
плавать Реальный тип с плавающей запятой, обычно называемый типом с плавающей запятой одинарной точности. Фактические свойства не указаны (кроме минимальных пределов); однако в большинстве систем это двоичный формат с плавающей запятой одинарной точности IEEE 754 (32 бита). Этот формат требуется в соответствии с дополнительным Приложением F «Арифметика с плавающей запятой IEC 60559». Преобразование из текста: [д]
  • %f %F
  • %g %G
  • %e %E
  • %a %A
для Ф
двойной Реальный тип с плавающей запятой, обычно называемый типом с плавающей запятой двойной точности. Фактические свойства не указаны (кроме минимальных пределов); однако в большинстве систем это двоичный формат с плавающей запятой двойной точности IEEE 754 (64 бита). Этот формат требуется в соответствии с дополнительным Приложением F «Арифметика с плавающей запятой IEC 60559».
  • %lf %lF
  • %lg %lG
  • %le %lE
  • %la %lA[и]
длинный двойной Реальный тип с плавающей запятой, обычно сопоставленный с расширенной точности форматом чисел с плавающей запятой . Фактические свойства не указаны. Это может быть формат с плавающей запятой расширенной точности x86 (80 бит, но обычно 96 бит или 128 бит в памяти с байтами заполнения ), формат с плавающей запятой, отличный от IEEE « дабл-дабл » (128 бит), формат с плавающей запятой четверной точности IEEE 754. -формат точки (128 бит) или такой же, как двойной. смотрите в статье о long double Подробности . %Lf %LF
%Lg %LG
%Le %LE
%La %LA[и]
л или л
  1. ^ Jump up to: а б с д и Минимальные диапазоны [−(2 п -1 −1), 2 п -1 −1] (например, [−127,127]) происходят из различных целочисленных представлений, разрешенных стандартом ( дополнение до единиц , величина знака , дополнение до двух ). [4] Однако большинство платформ используют дополнение до двух, подразумевая диапазон вида [−2 м −1 , 2 м −1 −1] с m n для этих реализаций, например [−128,127] ( SCHAR_MIN == −128 и SCHAR_MAX == 127) для 8-битного знакового символа . Начиная с C23, единственным допустимым представлением является дополнение до двух, поэтому значения варьируются как минимум от [−2 п -1 , 2 п -1 −1] . [5]
  2. ^ или %hhi для числового вывода
  3. ^ или %hhu для числового вывода
  4. ^ Эти строки формата также существуют для форматирования текста, но работают с двойным числом.
  5. ^ Jump up to: а б Прописные буквы отличаются от строчных при выводе. Спецификаторы верхнего регистра выдают значения в верхнем регистре, а строчные — в нижнем (%A, %E, %F, %G выдают такие значения, как INF, NAN и E (экспонента) в верхнем регистре).

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

Требования к отношениям заключаются в том, что long long не меньше, чем длиной , которая не меньше int , который не меньше короткий . Как Размер char всегда является минимальным поддерживаемым типом данных, никакие другие типы данных (кроме битовых полей ) не могут быть меньше.

Минимальный размер для char — 8 бит, минимальный размер для короткий и int составляет 16 бит, поскольку долго это 32 бита и long long должен содержать не менее 64 бит.

Тип int должен быть целочисленным типом, с которым целевой процессор работает наиболее эффективно. Это обеспечивает большую гибкость: например, все типы могут быть 64-битными. Однако популярны несколько различных схем целочисленной ширины (моделей данных). Поскольку модель данных определяет, как взаимодействуют различные программы, в рамках данного интерфейса приложения операционной системы используется единая модель данных. [9]

На практике, char обычно имеет размер 8 бит и short обычно имеет размер 16 бит (как и их беззнаковые аналоги). Это справедливо для таких разнообразных платформ, как SunOS 4 Unix 1990-х годов, Microsoft MS-DOS , современный Linux и Microchip MCC18 для встроенных 8-битных микроконтроллеров PIC . POSIX требует char иметь размер ровно 8 бит. [10] [11]

Различные правила стандарта C делают unsigned char базовый тип, используемый для массивов, подходящих для хранения произвольных объектов без битовых полей: отсутствие битов заполнения и представлений ловушек, определение представления объекта , [7] и возможность псевдонимов. [12]

Фактический размер и поведение типов с плавающей запятой также зависят от реализации. Единственное требование состоит в том, что long double не меньше, чем двойной , который не меньше плавать . Обычно для плавать и соответственно вдвое .

Стандарт C99 включает новые типы реальных чисел с плавающей запятой. float_t и double_t , определенный в <math.h>. Они соответствуют типам, используемым для промежуточных результатов выражений с плавающей запятой, когда FLT_EVAL_METHOD имеет значение 0, 1 или 2. Эти типы могут быть шире, чем long double.

В C99 также добавлены сложные типы: float _Complex, double _Complex, long double _Complex. В C11 добавлены мнимые типы (которые были описаны в информативном приложении к C99): float _Imaginary, double _Imaginary, long double _Imaginary. Включая заголовок <complex.h> позволяет получить доступ ко всем этим типам с помощью сложный и мнимое соответственно.

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

[ редактировать ]

В C99 добавлен логический тип данных. _Bool. Кроме того, <stdbool.h> заголовок определяет bool в качестве удобного псевдонима для этого типа, а также предоставляет макросы для true и false. _Bool функционирует аналогично обычному целочисленному типу, за одним исключением: любые присваивания _Bool значения, отличные от 0 (ложь), сохраняются как 1 (истина). Такое поведение существует для того, чтобы избежать целочисленного переполнения при неявных сужающих преобразованиях. Например, в следующем коде:

беззнаковый   символ   b   =   256  ;  if   (  b  )   { 	 /* сделать что-нибудь */  } 

Переменная b оценивается как ложь, если unsigned char имеет размер 8 бит. Это связано с тем, что значение 256 не соответствует типу данных, в результате чего используются младшие 8 битов, что приводит к нулевому значению. Однако изменение типа приводит к тому, что предыдущий код ведет себя нормально:

_Bool   б   =   256  ;  if   (  b  )   { 	 /* сделать что-нибудь */  } 

Тип _Bool также гарантирует, что истинные значения всегда сравниваются равными друг другу:

_Bool   а   =   1  ,   б   =   2  ;  if   (  a   ==   b  )   { 	 /* этот код будет работать */  } 

Целочисленные типы с точностью до бита

[ редактировать ]

Начиная с C23 , язык позволяет программисту определять целые числа, ширина которых составляет произвольное количество бит. Эти типы указаны как _BitInt(N), где N — целочисленное константное выражение, обозначающее количество битов, включая знаковый бит для знаковых типов, представленных в дополнении до двух. Максимальное значение N обеспечивается BITINT_MAXWIDTH и это по крайней мере ULLONG_WIDTH. Следовательно, тип _BitInt(2) (или signed _BitInt(2)) принимает значения от −2 до 1, а unsigned _BitInt(2) принимает значения от 0 до 3. Тип unsigned _BitInt(1) также существует, имеет значение 0 или 1 и не имеет эквивалентного знакового типа. [13]

Типы различий в размерах и указателях

[ редактировать ]

Спецификация языка C включает в себя определение типа с size_t и ptrdiff_t для представления величин, связанных с памятью. Их размер определяется в соответствии с арифметическими возможностями целевого процессора, а не возможностями памяти, такими как доступное адресное пространство. Оба эти типа определены в <stddef.h> заголовок ( cstddef на С++).

size_t — это целочисленный тип без знака, используемый для представления размера любого объекта (включая массивы) в конкретной реализации. Оператор sizeof возвращает значение типа size_t. Максимальный размер size_t предоставляется через SIZE_MAX, макроконстанта, которая определена в <stdint.h> заголовок ( cstdint заголовок в C++). size_t гарантированно будет иметь ширину не менее 16 бит. Кроме того, POSIX включает в себя ssize_t, который представляет собой целочисленный тип со знаком той же ширины, что и size_t.

ptrdiff_t — это целочисленный тип со знаком, используемый для представления разницы между указателями. Гарантируется, что он будет действителен только для указателей одного и того же типа; вычитание указателей, состоящих из разных типов, определяется реализацией.

Интерфейс к свойствам базовых типов

[ редактировать ]

Информация о фактических свойствах основных арифметических типов, таких как размер, предоставляется через макроконстанты в двух заголовках: <limits.h> заголовок ( climits заголовок в C++) определяет макросы для целочисленных типов и <float.h> заголовок ( cfloat заголовок в C++) определяет макросы для типов с плавающей запятой. Фактические значения зависят от реализации.

Свойства целочисленных типов

[ редактировать ]
  • CHAR_BIT – размер типа char в битах, обычно называемый размером байта (не менее 8 бит).
  • SCHAR_MIN, SHRT_MIN, INT_MIN, LONG_MIN, LLONG_MIN(C99) – минимально возможное значение целочисленных типов со знаком: подписанный char, подписанный короткий, подписанный int, подписанный длинный, подписанный длинный длинный
  • SCHAR_MAX, SHRT_MAX, INT_MAX, LONG_MAX, LLONG_MAX(C99) – максимально возможное значение целочисленных типов со знаком: подписанный char, подписанный короткий, подписанный int, подписанный длинный, подписанный длинный длинный
  • UCHAR_MAX, USHRT_MAX, UINT_MAX, ULONG_MAX, ULLONG_MAX(C99) – максимально возможное значение беззнаковых целых типов: unsigned char, unsigned short, unsigned int, unsigned long, unsigned long long
  • CHAR_MIN – минимально возможное значение char
  • CHAR_MAX – максимально возможное значение char
  • MB_LEN_MAX – максимальное количество байтов в многобайтовом символе
  • BOOL_WIDTH (C23) - разрядность _Bool, всегда 1
  • CHAR_WIDTH (C23) - разрядность char; CHAR_WIDTH, UCHAR_WIDTH и SCHAR_WIDTH равны CHAR_BIT по определению
  • SCHAR_WIDTH, SHRT_WIDTH, INT_WIDTH, LONG_WIDTH, LLONG_WIDTH (C23) - разрядность signed char, short, int, long, и long long соответственно
  • UCHAR_WIDTH, USHRT_WIDTH, UINT_WIDTH, ULONG_WIDTH, ULLONG_WIDTH (C23) - разрядность unsigned char, unsigned short, unsigned int, unsigned long, и unsigned long long соответственно

Свойства типов с плавающей запятой

[ редактировать ]
  • FLT_MIN, DBL_MIN, LDBL_MIN – минимальное нормализованное положительное значение float, double, long double соответственно
  • FLT_TRUE_MIN, DBL_TRUE_MIN, LDBL_TRUE_MIN (C11) – минимальное положительное значение float, double, long double соответственно
  • FLT_MAX, DBL_MAX, LDBL_MAX – максимальное конечное значение float, double, long double соответственно
  • FLT_ROUNDS – режим округления для операций с плавающей запятой
  • FLT_EVAL_METHOD (C99) – метод оценки выражений, включающий различные типы с плавающей запятой.
  • FLT_RADIX – основание экспоненты в типах с плавающей запятой
  • FLT_DIG, DBL_DIG, LDBL_DIG – количество десятичных цифр, которые могут быть представлены без потери точности с помощью float, double, long double соответственно
  • FLT_EPSILON, DBL_EPSILON, LDBL_EPSILON разница между 1,0 и следующим представимым значением float, double, long double соответственно
  • FLT_MANT_DIG, DBL_MANT_DIG, LDBL_MANT_DIG – количество FLT_RADIX-базовые цифры в мантиссе с плавающей запятой для типов float, double, long double соответственно
  • FLT_MIN_EXP, DBL_MIN_EXP, LDBL_MIN_EXP – минимальное отрицательное целое число такое, что FLT_RADIX возведенный в степень, меньшую, чем это число, представляет собой нормализованное число с плавающей запятой, двойное, длинное двойное значение соответственно
  • FLT_MIN_10_EXP, DBL_MIN_10_EXP, LDBL_MIN_10_EXP – минимальное отрицательное целое число, такое, что 10, возведенное в эту степень, представляет собой нормализованное число с плавающей запятой, двойное или длинное двойное значение соответственно
  • FLT_MAX_EXP, DBL_MAX_EXP, LDBL_MAX_EXP – максимальное положительное целое число такое, что FLT_RADIX возведенный в степень, меньшую, чем это число, представляет собой нормализованное число с плавающей запятой, двойное, длинное двойное значение соответственно
  • FLT_MAX_10_EXP, DBL_MAX_10_EXP, LDBL_MAX_10_EXP – максимальное положительное целое число, такое, что 10, возведенное в эту степень, представляет собой нормализованное число с плавающей запятой, двойное или длинное двойное значение соответственно
  • DECIMAL_DIG (C99) – минимальное количество десятичных цифр, при котором любое число самого широкого поддерживаемого типа с плавающей запятой может быть представлено в десятичном формате с точностью DECIMAL_DIG цифры и считывать обратно в исходном типе с плавающей запятой, не меняя его значения. DECIMAL_DIG это минимум 10.

Целочисленные типы фиксированной ширины

[ редактировать ]

Стандарт C99 включает определения нескольких новых целочисленных типов для повышения переносимости программ. [2] Уже доступные базовые целочисленные типы были сочтены недостаточными, поскольку их фактические размеры определяются реализацией и могут различаться в разных системах. Новые типы особенно полезны во встроенных средах , где оборудование обычно поддерживает только несколько типов и эта поддержка варьируется в зависимости от среды. Все новые типы определены в <inttypes.h> заголовок ( cinttypes заголовок на C++), а также доступны по адресу <stdint.h> заголовок ( cstdint заголовок в C++). Типы можно сгруппировать в следующие категории:

  • Целочисленные типы точной ширины, которые гарантированно будут иметь одинаковое количество n бит во всех реализациях. Включается только в том случае, если он доступен в реализации.
  • Целочисленные типы наименьшей ширины, которые гарантированно являются наименьшим типом, доступным в реализации, который имеет как минимум указанное количество n бит. Гарантировано указано не менее N=8,16,32,64.
  • Самые быстрые целочисленные типы, которые гарантированно будут самым быстрым целочисленным типом, доступным в реализации, который имеет как минимум указанное число n бит. Гарантировано указано не менее N=8,16,32,64.
  • Целочисленные типы указателей, которые гарантированно смогут хранить указатель. Включается только в том случае, если он доступен в реализации.
  • Целочисленные типы максимальной ширины, которые гарантированно будут самым большим целочисленным типом в реализации.

В следующей таблице приведены типы и интерфейсы для получения подробной информации о реализации ( n относится к количеству битов):

Тип категории Знаковые типы Беззнаковые типы
Тип Минимальное значение Максимальное значение Тип Минимальное значение Максимальное значение
Точная ширина intn_tINTn_MININTn_MAXuintn_t0 UINTn_MAX
Наименьшая ширина int_leastn_tINT_LEASTn_MININT_LEASTn_MAXuint_leastn_t0 UINT_LEASTn_MAX
Самый быстрый int_fastn_tINT_FASTn_MININT_FASTn_MAXuint_fastn_t0 UINT_FASTn_MAX
Указатель intptr_tINTPTR_MININTPTR_MAXuintptr_t0 UINTPTR_MAX
Максимальная ширина intmax_tINTMAX_MININTMAX_MAXuintmax_t0 UINTMAX_MAX

Спецификаторы формата Printf и scanf

[ редактировать ]

The <inttypes.h> заголовок ( cinttypes в C++) предоставляет функции, расширяющие функциональность типов, определенных в <stdint.h> заголовок. Он определяет макросы для строк формата printf и спецификаторов строк формата scanf, соответствующих типам, определенным в <stdint.h> и несколько функций для работы с intmax_t и uintmax_t типы. Этот заголовок был добавлен в C99 .

Строка формата Printf

[ редактировать ]

Макросы имеют формат PRI{fmt}{type}. Здесь {fmt} определяет форматирование вывода и является одним из d (десятичный), x (шестнадцатеричный), o (восьмеричный), u (без подписи) и i (целое число). {type} определяет тип аргумента и является одним из n, FASTn, LEASTn, PTR, MAX, где n соответствует количеству битов в аргументе.

Строка формата Scanf

[ редактировать ]

Макросы имеют формат SCN{fmt}{type}. Здесь {fmt} определяет форматирование вывода и является одним из d (десятичный), x (шестнадцатеричный), o (восьмеричный), u (без подписи) и i (целое число). {type} определяет тип аргумента и является одним из n, FASTn, LEASTn, PTR, MAX, где n соответствует количеству битов в аргументе.

Дополнительные типы с плавающей запятой

[ редактировать ]

Подобно целым типам фиксированной ширины, ISO/IEC TS 18661 определяет типы с плавающей запятой для обмена IEEE 754 и расширенные форматы в двоичном и десятичном формате:

  • _FloatN для форматов двоичного обмена;
  • _DecimalN для десятичных форматов обмена;
  • _FloatNx для расширенных двоичных форматов;
  • _DecimalNx для десятичных расширенных форматов.

Структуры

[ редактировать ]

Структуры объединяют хранилище нескольких элементов данных потенциально разных типов данных в один блок памяти, на который ссылается одна переменная. В следующем примере объявляется тип данных struct birthday который содержит имя и день рождения человека. За определением структуры следует объявление переменной John который выделяет необходимое хранилище.

struct   Birthday   { 	 символа   имя  [  20  ]; 	 международный   день  ; 	 внутренний   месяц  ; 	 международный   год  ;  };  структура   дня рождения   Джона  ; 

Расположение структуры в памяти — это проблема реализации языка для каждой платформы с некоторыми ограничениями. Адрес памяти первого члена должен совпадать с адресом самой структуры. Структуры могут быть инициализированы или назначены с использованием составных литералов. Функция может напрямую возвращать структуру, хотя во время выполнения это часто неэффективно. Начиная с C99 , структура может также заканчиваться гибким элементом массива .

Структура, содержащая указатель на структуру своего типа, обычно используется для построения связанных структур данных :

структура   узла   { 	 интервал   val  ; 	 структура   узла   *  следующий  ;  }; 

Для каждого типа T, кроме типов void и function, существуют типы "массив N элементы типа T" . Массив — это совокупность значений одного типа, хранящихся в памяти последовательно. Массив размером N индексируется целыми числами из 0 до и включительно N−1. Вот краткий пример:

интервал   кот  [  10  ];    // массив из 10 элементов, каждый типа int 

Массивы можно инициализировать с помощью составного инициализатора, но не присваивать. Массивы передаются функциям путем передачи указателя на первый элемент. Многомерные массивы определяются как «массив массива…» , и все измерения, кроме самого внешнего, должны иметь постоянный размер времени компиляции:

интервал   а  [  10  ][  8  ];    // массив из 10 элементов, каждый типа 'массив из 8 элементов int' 

Указатели

[ редактировать ]

Каждый тип данных T имеет соответствующий указатель типа на T. Указатель это тип данных, который содержит адрес места хранения переменной определенного типа. Они объявлены звездочкой ( *) описатель типа, следующий за базовым типом хранилища и предшествующий имени переменной. Пробелы до или после звездочки не являются обязательными.

символ   *  квадрат  ;  длинный   *  круг  ;  интервал   *  овал  ; 

Указатели также могут быть объявлены для типов данных указателей, создавая таким образом несколько косвенных указателей, например символ ** и int *** , включая указатели на типы массивов. Последние встречаются реже, чем массив указателей, и их синтаксис может сбивать с толку:

символ   *  ПК  [  10  ];     // массив из 10 элементов 'указателя на char'  char   (  *  pa  )[  10  ];   // указатель на массив из 10 элементов char 

Элемент pc требуется десять блоков памяти размером с указатель на char (обычно 40 или 80 байт на распространенных платформах), но элемент pa представляет собой только один указатель (размером 4 или 8 байт), а данные, на которые он ссылается, представляют собой массив из десяти байтов ( sizeof *pa == 10).

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

союз   { 	 интервал   я  ; 	 плавать   f  ; 	 структура   { 		 беззнаковое   целое число   и  ; 		 двойной   д  ; 	 }   с  ;  }   ты  ; 

Общий размер u размер u.s – которая представляет собой сумму размеров u.s.u и u.s.d - с s больше, чем оба i и f. При назначении чего-либо u.i, некоторые части u.f можно сохранить, если u.i меньше, чем u.f.

Чтение из члена объединения — это не то же самое, что приведение, поскольку значение члена не преобразуется, а просто считывается.

Указатели функций

[ редактировать ]

Указатели функций позволяют ссылаться на функции с определенной сигнатурой. Например, для хранения адреса стандартной функции abs в переменной my_int_f:

int   (  *  my_int_f  ) (  int  )   =   &  abs  ;  // оператор & можно опустить, но он ясно дает понять, что здесь используется «адрес» abs 

Указатели на функции вызываются по имени, как и обычные вызовы функций. Указатели на функции отличаются от указателей и указателей void .

Спецификаторы типа

[ редактировать ]

Вышеупомянутые типы могут быть дополнительно охарактеризованы квалификаторами типа , что дает квалифицированный тип . По состоянию на 2014 год и C11 , в стандарте C есть четыре квалификатора типа: const ( С89 ), volatile ( С89 ), restrict ( С99 ) и _Atomic ( C11 ) – последний имеет личное имя, чтобы избежать конфликтов с именами пользователей, [14] но более обычное имя atomic можно использовать, если <stdatomic.h> заголовок включен. Из них const на сегодняшний день является самым известным и наиболее используемым, появляющимся в стандартной библиотеке и встречающимся при любом значительном использовании языка C, который должен удовлетворять const-correctness . Остальные квалификаторы используются для низкоуровневого программирования и, хотя там широко используются, типичными программистами они используются редко. [ нужна ссылка ]

См. также

[ редактировать ]
  1. ^ Барр, Майкл (2 декабря 2007 г.). «Портативные целые числа фиксированной ширины в C» . Проверено 18 января 2016 г.
  2. ^ Jump up to: а б Спецификация ISO/IEC 9899:1999, TC3 (PDF) . п. 255, § 7.18 Целочисленные типы <stdint.h> .
  3. ^ Jump up to: а б с д и ж г час я дж Спецификация ISO/IEC 9899:1999, TC3 (PDF) . п. 22, § 5.2.4.2.1 Размеры целочисленных типов <limits.h> .
  4. ^ Обоснование международного стандарта — Языки программирования — C, версия 5.10 (PDF) . п. 25, § 5.2.4.2.1 Размеры целочисленных типов <limits.h> .
  5. ^ Проект спецификации ISO/IEC 9899:2023 (PDF) . п. 41, § 6.2.6 Представления типов .
  6. ^ «Целочисленные ограничения C и C++» . 21 июля 2023 г.
  7. ^ Jump up to: а б Спецификация ISO/IEC 9899:1999, TC3 (PDF) . п. 37, § 6.2.6.1 Представления типов – Общие сведения .
  8. ^ Jump up to: а б с д и ж Спецификация ISO/IEC 9899:1999, TC3 (PDF) . п. 56, § 6.4.4.1 Целочисленные константы .
  9. ^ «64-битные модели программирования: почему LP64?» . Открытая группа . Проверено 9 ноября 2011 г.
  10. ^ «Ширина типа (Библиотека GNU C)» . www.gnu.org . Проверено 30 июля 2022 г.
  11. ^ "<limits.h>" . pubs.opengroup.org . Проверено 30 июля 2022 г.
  12. ^ Спецификация ISO/IEC 9899:1999, TC3 (PDF) . п. 67, § 6.5 Выражения .
  13. ^ Проект спецификации ISO/IEC 9899:2023 (PDF) . п. 37, § 6.2.5 Типы .
  14. ^ C11: Новый стандарт C , Томас Плам
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: ddb7a37e58b8f3e6b007cf890ea708eb__1721754060
URL1:https://arc.ask3.ru/arc/aa/dd/eb/ddb7a37e58b8f3e6b007cf890ea708eb.html
Заголовок, (Title) документа по адресу, URL1:
C data types - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)