Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_C-04.doc
Скачиваний:
1
Добавлен:
21.11.2019
Размер:
88.58 Кб
Скачать

Рубанчик В.Б.,

Михайличенко В.Н.

Лабораторная работа "Изучение свойств указателей"

5/5

Лабораторная работа

Тема: Изучение свойств указателей

Цель работы: Закрепить на практических примерах понимание основных свойств указателей

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

Работа с указателями тесно связана с двумя другими операциями языка Си — вычислением размера объекта или типа, и приведением типов данных.

Операция вычисления размера sizeof

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

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

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

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

sizeof 2, sizeof x, sizeof(2*x+1)

Результат применения операции имеет специальный вспомогательный тип size_t, определенный в нескольких заголовочных файлах, включая stdio.h.

Размер этого типа выбирается так, чтобы он мог содержать число, описывающее теоретически самый большой размер массива данных любого типа. Для шестнадцатиразрядных компиляторов, к которым относится ВС 3.1, это синоним типа unsigned int.

Операция sizeof обладает приоритетом и типом ассоциативности остальных унарных операций.

Она имеет два основных применения.

  • Операция sizeof применена к переменной или другому конкретному объекту данных (выражение, константа), и, если того не требует определение порядка действий, операнд sizeof брать в скобки не требуется:

2*sizeof x +1.

  • Операция sizeof может быть применена к типу данных. Результатом является размер памяти, отводимой компилятором для указанного типа. В этом случае операнд (т.е. имя типа данных) нужно обязательно заключать в круглые скобки:

sizeof(float).

Операцию sizeof можно применять к любым типам:

а) к базовым типам — int, float, … ,

б) к типам, производным от базовых, например, sizeof(int*) — размер "указателя на int", или к массиву;

в) к структурным типам данных, формируемым программистом (будут изучаться позже).

ЗАДАНИЕ 1 (анализ результатов выполнения операции sizeof)

1. Подготовить и выполнить программу, содержащую следующие операторы (файл lab4_1.c):

float x=-8.92;

int y=5;

printf("sizeof x=%u\n", sizeof x);

printf("sizeof y=%u\n", sizeof y);

printf("sizeof x+y=%u\n", sizeof x+y);

printf("sizeof (x+y)=%u\n", sizeof (x+y));

printf("sizeof x*2+1=%u\n", sizeof x*2+1);

printf("sizeof 2*y+1=%u\n", sizeof 2*y+1);

printf("sizeof ++y=%u\n", sizeof ++y*2);

printf("sizeof y--*2=%u\n", sizeof y--*2);

В отчете результаты работы программы оформить в виде таблицы

Выражение

Размер объекта

в байтах

Порядок вычислений

. . .

. . .

. . .

. . .

. . .

. . .

В последнем столбце требуется расставить скобки в соответствии с приоритетами операций.

2. Написать программу, которая в отдельных строках выводит информацию о размере каждого из базовых типов языка (char, short, int, long, float, double, long double). Выводится название типа данных и его вычисленный размер.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]