Лучший опыт

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

Предыдущая часть: “Язык C: основы синтаксиса” В языке С различают следующие типы данных: Базовый  —  арифметический тип, который, в свою очередь, делится на (a) целочисленный и (b) тип с плавающей точкой.Перечисляемый  —  арифметический тип, используемый для определения переменных, которые могут присваивать только определенные дискретные целочисленные значения на протяжении всей программы.Пустой (тип void)  —  тип, спецификатор к?
Язык С: типы данных...

Предыдущая часть: “Язык 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, который можно привести к любому типу данных.