Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПЯВУ- читать.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
162.3 Кб
Скачать

1.Скалярные типы данных

Важное отличие языка СИ от других языков (PL1, FORTRAN, и др.) является отсутствие принципа умолчания, что приводит к необходимости объявления всех переменных используемых в программе явно вместе с указанием соответствующих им типов.

Целый тип данных (он же скалярный)

Для определения данных целого типа используются различные ключевые слова, которые определяют диапазон значений и размер области памяти, выделяемой под переменные

Char 1байт от –128 до 127;

Int 2/4 байт

Short 2байта от –32768 до 32767

Long 4байта от -2147483648 до 21474836647

Unsigned char 1байт от 0 до 255

Unsigned int 2/4 байта

Unsigned short 2байта от 0 до 65535

Unsigned long 4байта от 0 до 21294967295

signed и unsigned указывают, как интерпретируется нулевой бит объявляемой переменной, т.е., если указано ключевое слово unsigned, то нулевой бит интерпретируется как часть числа, в противном случае нулевой бит интерпретируется как знаковый. В том случае, если спецификатор типа состоит из ключевого типа signed или unsigned и далее следует идентификатор переменной, то она будет рассматриваться как переменная типа int. Например: unsigned int n; unsigned int b; int c; (подразумевается signed int c );

unsigned d; (подразумевается unsigned int d ); signed f; (подразумевается signed int f ). Отметим, что модификатор типа char используется для представления символа (из массива представление символов) или для объявления строковых литералов. Следует сделать следующее замечание: в языке СИ не определено представление в памяти и диапазон значений для идентификаторов с модификаторами типа int и unsigned int. Размер памяти для переменной с модификатором типа signed int определяется длиной машинного слова, которое имеет различный размер на разных машинах. Так, на 16-ти разрядных машинах размер слова равен 2-м байтам, на 32-х разрядных машинах соответственно 4-м байтам

2.Векторные типы данных

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

Для модификации размера указателя можно использовать ключевые.

unsigned int * a; /* переменная а представляет собой указатель на тип unsigned int (целые числа без знака) */

double * x;/ переменная х указывает на тип данных с плавающей точкой удвоенной точности */

char * fuffer ;/объявляется указатель с именем fuffer который указывает на переменную типа char */

double nomer;

void *addres;

addres = & nomer;

(double *)addres ++;/* Переменная addres объявлена как указатель на объект любого типа. Поэтому ей можно присвоить адрес любого объекта (& - операция вычисления адреса).

Массивы. Массивы - это группа элементов одинакового типа (double, float, int и т.п.). Из объявления массива компилятор должен получить информацию о типе элементов массива и их количестве. В языке СИ определены только одномерные массивы, но поскольку элементом массива может быть массив, можно определить и многомерные массивы. Они формализуются списком константных выражений, следующих за идентификатором массива, причем каждое константное выражение заключается в свои квадратные скобки. Каждое константное выражение в квадратных скобках определяет число элементов по данному измерению массива. В языке СИ первый элемент массива имеет индекс равный 0.

Примеры:

int a[2][3]; /представлено в виде матрицы

a[0][0] a[0][1] a[0][2]

a[1][0] a[1][1] a[1][2]/

double b[10]; /* вектор из 10 элементов имеющих тип double */

Пример объявления символьного массива.

char str[] = "объявление символьного массива";

Следует учитывать, что в символьном литерале находится на один элемент больше, так как последний из элементов является управляющей последовательностью '\0'.

Структура языка Си это векторный тип данных для хранения элементов, преимущественно разного типа.

Использование структур приводит к необоснованным затратам памяти, следовательно использовать реже.

Объединение – это структура данных, когда определяется самое длинное поле и все остальные поля разделяют с ней один и тот же адрес, т.е. это средство, позволяющее запоминать данные различных типов в одном и том же месте памяти. Объединение позволяет создавать массив, состоящий из эл-тов одинакового размера, каждый из которых может содержать различные типы данных.

Объединения устанавливаются таким же способом, как и структуры. Есть шаблон и переменные объединения. Они могут определяться одновременно или, если используется имя объединения, последовательно за два шага:

Перечисляемый тип – множество поименованных целых констант.