Язык С: типы данных

Предыдущая часть: “Язык C: основы синтаксиса

В языке С различают следующие типы данных:

  1. Базовый  —  арифметический тип, который, в свою очередь, делится на (a) целочисленный и (b) тип с плавающей точкой.
  2. Перечисляемый  —  арифметический тип, используемый для определения переменных, которые могут присваивать только определенные дискретные целочисленные значения на протяжении всей программы.
  3. Пустой (тип void)  —  тип, спецификатор которого указывает на отсутствие значения.
  4. Производный  —  тип, к которому относятся (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) указывает на отсутствие значения. Он используется в трех случаях:

  1. Возврат из функции  —  void

В языке C существуют различные функции, которые не возвращают никакого значения, или, можно сказать, возвращают void. Функция без возвращаемого значения имеет тип результата void. Например, void exit (int status);

  1. Аргумент функции  —  void

В языке C существуют различные функции, которые не принимают никаких параметров. Функция без параметров может принимать void. Например, int rand(void);

  1. Указатель void

Указатель типа void * представляет адрес объекта, но не его тип. Например, функция выделения памяти void *malloc( size_t size ); возвращает указатель void, который можно привести к любому типу данных.

Читайте также:

Читайте нас в TelegramVK и Яндекс.Дзен

Предыдущая статьяMongoDB: создание и удаление коллекции
Следующая статьяКак тестировать компоненты React