Содержание
- 2. Зачем нужны указатели Существует три причины, по которым невозможно написать хорошую программу без использования указателей: указатели
- 3. Что такое указатель Указатель (pointer) – переменная, в которой хранится адрес другого объекта. Обычно – это
- 4. Объявление указателя Переменная, содержащая адрес ячейки памяти, должна быть объявлена как указатель. Объявление указателя состоит из
- 5. Операторы для работы с указателями Оператор m = &count; присваивает переменной m адрес переменной count. Этот
- 6. Инициализировать указатель можно используя адрес уже объявленной переменной с помощью оператора взятия адреса & выделяя под
- 7. Пример #include "stdafx.h" #include "conio.h" void main() { int someVariable = 4; //объявляем и инициализируем переменную
- 8. Присваивание указателей Указатель можно использовать в правой части оператора присваивания для присваивания его значения другому указателю.
- 9. Преобразование типа указателя Указатель можно преобразовать к другому типу Эти преобразования бывают двух видов: с использованием
- 10. В отличие от void *, преобразования всех остальных типов указателей должны быть всегда явными Т.е должна
- 11. Однако следует учитывать, что преобразование одного типа указателя к другому может вызвать непредсказуемое поведение программы. #include
- 12. Адресная арифметика В языке С допустимы только две арифметические операции над указателями: суммирование вычитание Предположим, текущее
- 13. Применительно к указателям на char, операций адресной арифметики выполняются как обычные арифметические операции, потому что длина
- 14. К указателям можно добавлять целые числа или вычитать из них целые числа. Выполнение оператора p1 =
- 15. Сравнение указателей Стандартом С допускается сравнение двух указателей. Например, если объявлены два указателя р и q,
- 16. Указатели и массивы
- 17. Доступ к элементам массива с помощью адресной арифметики Рассмотрим следующий фрагмент программы: char str[80], *p1; p1
- 18. Обращение к элементам массива В языке С существуют два метода обращения к элементу массива: адресная арифметика
- 19. Пример работы с массивами через указатели #include "stdafx.h" #include #include #define SIZE 10 int main(void) {
- 20. Индексация указателей на многомерные массивы Например, если а – это указатель на двухмерный массив целых размерностью
- 21. Массивы указателей Как и обычные переменные, указатели могут быть собраны в массив. В следующем операторе объявлен
- 22. Указатели и строки
- 23. Указатели и строки Большинство операций языка Си, имеющих дело со строками, работают с указателями. Рассмотрим, например,
- 24. Массив и указатель: различия Возможны два способа объявления массива: static char heart[ ]="Я люблю язык Cи!";
- 25. Но операцию увеличения можно использовать только с указателем: while ((*head) != '\0') /* останов в конце
- 26. Предположим, мы хотим изменить head на heart. Можно так: head=heart; /* теперь head указывает на массив
- 27. Вот каким путем можно изменить обращение к head и проникнуть в сам массив: heart[13] = 'C';
- 28. Массивы указателей часто используются при работе со строками Например, можно написать функцию, выводящую нужную строку с
- 29. Динамическое распределение памяти Динамическое распределение означает, что программа выделяет память для данных во время своего выполнения
- 30. Куча Память, выделяемая в С функциями динамического распределения данных, находится в т.н. куче – динамически распределяемой
- 31. Функции динамического распределения памяти Функция malloc() выделяет требуемый участок свободной памяти Функция free() освобождает участок памяти,
- 32. Пример Выделение непрерывного участка памяти объемом 1000 байтов: char *p; p = malloc(1000); /* выделение 1000
- 33. Проверка успешности выделения памяти Если malloc() не смогла по какой-либо причине выделить требуемый участок памяти, то
- 34. Функция free() Функция free() противоположна функции malloc() в том смысле, что она возвращает системе участок памяти,
- 35. Динамическое распределение строки #include "stdafx.h" #include #include #include int main(void) { char *s; register int t;
- 36. Динамическое размещение двумерного массива #include "stdafx.h" #include #include int pwr(int a, int b); int main(void) {
- 37. Указатель р в главной программе (main()) объявлен как int (*p)[10] Следует отметить, что скобки вокруг *р
- 39. Скачать презентацию