Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
вариант на печать..doc
Скачиваний:
3
Добавлен:
25.04.2019
Размер:
2.27 Mб
Скачать

15. Операции над указателями.

-Операции разыменования;

-Преобразование типов (приведение типов);

-Присваивание;

-Взятие адреса амперсанта;

-Сложение и вычитание;

Вычитание 1. Вычитание применяется к указателям на объекты одного типа или указатели целой константы.

2. Вычитание 2 указателей 1-го типа можно определять « расстояние» м/у 2-мя участками памяти. Оно определяет в единицах кратных длине ( в байтах) объекта того типа к которому отнесён указатель.При вычитании из указателя целочисленного константы результат уменьшается на величину производной этой константы. И размер памяти требуемой для хранения константы.

Сложение. Сложение выполняется аналогично в том случае, когда 2-ое слагаемое является целочисленной константой. При этом суммирование 2-х указателей запрещено синтаксисом языка С++.При выделении адресов для хранения переменных порядок их присваивания им переменным обратный порядку их появления в программе. Переменная в которой объявлена в программе 1-ой получает адрес последней.( как правило это значение адреса является наибольшей).Как правило соседним переменным присваиваются соседние адреса, хотя синтаксисом языка С++ не гарантированно. Присваивание соседних адресов двум элементам гарантировано только для структурированных типов данных, таких как массивы, структуры.

-Инкремент (++);

-Декремент(--);

-Операция сравнения;

16. Последовательность выполнения операций над указателями. Пример. Последовательность выполнения операций над указателями

  • Разыменование( *);

  • Инкремент (++);

  • Декремент(--);

  • Взятие адреса (&);

Пример

# include < iostream>

Void main()

{ int i1=10,i2=20,i3=30;

int *p=&i2; // значение i2

cout<< “\n*&i2”<< *&i2; // значение i2 с начало увеличили на 1;

cout<<:\n*p=”<<*p; // значение i2 ,p увеличили на 1;

cout<<”\n*p++”<<*p++; // Значение i1;

cout<<”\n*p=”<<*p; // значение i1 с начало увеличили 1;

cout<<”\n++*p=”<< ++*p; // значение i2 уменьшили с начало на р;

cout<<”\n*--p=”<<*--p; значение i3 увеличили на 1;

cout<<”\n++*--p=”<<++*--p;

указатели на массивы

- нельзя писать m++

- m=&m[0];

-m[i]  *(m+i)

18. Отладка программ, локализация ошибок, типы ошибок.

Отладка - это процесс локализации и исправления ошибок, обнаружен­ных при тестировании программного обеспечения. Локализацией называют процесс определения оператора программы, выполнение которого вызвало нарушение нормального вычислительного процесса. Для исправления ошиб­ки необходимо определить ее причину, т. е. определить оператор или фраг­мент, содержащие ошибку. Причины ошибок могут быть как очевидны, так и очень глубоко скрыты.

В целом сложность отладки обусловлена следующими причинами:

  • требует от программиста глубоких знаний специфики управления ис­пользуемыми техническими средствами, операционной системы, среды и языка программирования, реализуемых процессов, природы и специфики различных ошибок, методик отладки и соответствующих программных средств;

  • психологически дискомфортна, так как необходимо искать собствен­ные ошибки и, как правило, в условиях ограниченного времени;

  • возможно взаимовлияние ошибок в разных частях программы, напри­мер, за счет затирания области памяти одного модуля другим из-за ошибок адресации;

отсутствуют четко сформулированные методики отладки.

Типы ошибок.

синтаксические компановки выполнения

Фиксируются компилятором, транслятором, интерпритатором

При объединении модулей программы

Появление сообщений об ошибке зафиксированных схемами контроля и выполнения, зависание компиляции