Предыдущая часть: “Язык C: основы синтаксиса”
В языке С различают следующие типы данных:
- Базовый — арифметический тип, который, в свою очередь, делится на (a) целочисленный и (b) тип с плавающей точкой.
- Перечисляемый — арифметический тип, используемый для определения переменных, которые могут присваивать только определенные дискретные целочисленные значения на протяжении всей программы.
- Пустой (тип void) — тип, спецификатор которого указывает на отсутствие значения.
- Производный — тип, к которому относятся (a) тип указателей, (b) тип массивов, (с) типы структур, (d) тип-объединение и (e) тип-функция.
Типы массивов и типы структур называются агрегированными типами. Тип-функция определяет тип возвращаемого значения функции. Ниже рассмотрим основные типы. Описание остальных типов будет дано в последующих разделах.
Целочисленные типы
В следующей таблице представлены стандартные целочисленные типы с их размерами хранения и диапазонами значений:
Чтобы получить точный размер типа или переменной на конкретной платформе, можно использовать оператор sizeof
. Выражение sizeof(type)
выдает размер хранения объекта или типа в байтах. Ниже приведен пример получения размера различных типов на компьютере с помощью различных констант, определенных в заголовочном файле limits.h
:
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
int main(int argc, char** argv) {
printf("CHAR_BIT : %d\n", CHAR_BIT);
printf("CHAR_MAX : %d\n", CHAR_MAX);
printf("CHAR_MIN : %d\n", CHAR_MIN);
printf("INT_MAX : %d\n", INT_MAX);
printf("INT_MIN : %d\n", INT_MIN);
printf("LONG_MAX : %ld\n", (long) LONG_MAX);
printf("LONG_MIN : %ld\n", (long) LONG_MIN);
printf("SCHAR_MAX : %d\n", SCHAR_MAX);
printf("SCHAR_MIN : %d\n", SCHAR_MIN);
printf("SHRT_MAX : %d\n", SHRT_MAX);
printf("SHRT_MIN : %d\n", SHRT_MIN);
printf("UCHAR_MAX : %d\n", UCHAR_MAX);
printf("UINT_MAX : %u\n", (unsigned int) UINT_MAX);
printf("ULONG_MAX : %lu\n", (unsigned long) ULONG_MAX);
printf("USHRT_MAX : %d\n", (unsigned short) USHRT_MAX);
return 0;
}
Если скомпилировать и выполнить приведенную выше программу в Linux, получим следующий результат:
CHAR_BIT : 8
CHAR_MAX : 127
CHAR_MIN : -128
INT_MAX : 2147483647
INT_MIN : -2147483648
LONG_MAX : 9223372036854775807
LONG_MIN : -9223372036854775808
SCHAR_MAX : 127
SCHAR_MIN : -128
SHRT_MAX : 32767
SHRT_MIN : -32768
UCHAR_MAX : 255
UINT_MAX : 4294967295
ULONG_MAX : 18446744073709551615
USHRT_MAX : 65535
Типы с плавающей точкой
В следующей таблице представлены стандартные типы с плавающей точкой с размерами хранения, диапазонами значений и их точностью:
В заголовочном файле float.h
определяются макросы, позволяющие использовать в программах эти значения и другие определения двоичного представления действительных значений. В следующем примере выводится объем памяти, занимаемый типом с плавающей точкой и диапазоном его значений.
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
int main(int argc, char** argv) {
printf("Storage size for float : %d \n", sizeof(float));
printf("FLT_MAX : %g\n", (float) FLT_MAX);
printf("FLT_MIN : %g\n", (float) FLT_MIN);
printf("-FLT_MAX : %g\n", (float) -FLT_MAX);
printf("-FLT_MIN : %g\n", (float) -FLT_MIN);
printf("DBL_MAX : %g\n", (double) DBL_MAX);
printf("DBL_MIN : %g\n", (double) DBL_MIN);
printf("-DBL_MAX : %g\n", (double) -DBL_MAX);
printf("Precision value: %d\n", FLT_DIG );
return 0;
}
Если скомпилировать и выполнить вышеприведенную программу в Linux, получим следующий результат:
Storage size for float : 4
FLT_MAX : 3.40282e+38
FLT_MIN : 1.17549e-38
-FLT_MAX : -3.40282e+38
-FLT_MIN : -1.17549e-38
DBL_MAX : 1.79769e+308
DBL_MIN : 2.22507e-308
-DBL_MAX : -1.79769e+308
Precision value: 6
Пустые типы (void
)
Пустой тип (void
) указывает на отсутствие значения. Он используется в трех случаях:
- Возврат из функции —
void
В языке C существуют различные функции, которые не возвращают никакого значения, или, можно сказать, возвращают void
. Функция без возвращаемого значения имеет тип результата void
. Например, void exit (int status);
- Аргумент функции —
void
В языке C существуют различные функции, которые не принимают никаких параметров. Функция без параметров может принимать void
. Например, int rand(void);
- Указатель
void
Указатель типа void *
представляет адрес объекта, но не его тип. Например, функция выделения памяти void *malloc( size_t size );
возвращает указатель void
, который можно привести к любому типу данных.
Читайте также:
- В чем Windows превосходит Linux
- Как начать учиться, когда на это совсем нет времени
- Сделай сам - как автоматизировать прошивку смартфонов
Читайте нас в Telegram, VK и Яндекс.Дзен