Содержание
- 2. Указатели Указатель – это переменная, значением которой является адрес, по которому располагаются данные. Адрес – это
- 3. Указатели Типизированный указатель – указатель, содержащий адрес данных определенного типа (системного или пользовательского). Не типизированный указатель
- 4. Указатели Ближний указатель – указатель, содержащий только смещение, по которому располагаются данные. Сегмент в этом случае
- 5. Указатели Работа с указателями в языке С включает три действия, осуществляемых в следующем порядке: объявление указателя;
- 6. Указатели Объявление (описание) указателя в языке C имеет следующий вид: тип [near|far] *имя [=значение]; В современной
- 7. Указатели Указатель при объявлении можно инициализировать, указав через знак присвоения соответствующее значение. Данное значение должно быть
- 8. Указатели Операция взятия адреса – операция языка C, возвращающая адрес переменной. Данная операция имеет следующий синтаксис:
- 9. Указатели Пример объявления не типизированного указателя с инициализацией нулевым значением: void *ptr = NULL;
- 10. Указатели Установка указателя - присвоение его значению адреса, по которому располагаются или будут располагаться данные. Для
- 11. Указатели Для обращения к значению, располагаемому по адресу, содержащемуся в указателе, используется операция разыменования указателя. Данная
- 12. Указатели В языке С можно создавать константные указатели – значение, расположенное по этому указателю нельзя изменить.
- 13. Указатели и массивы Объявление указателя на массив имеет тот же синтаксис, что и объявление обычного указателя.
- 14. Указатели и массивы Фрагмент программы, в которой объявляется массив из 10 элементов целого типа, осуществляется ввод
- 15. Указатели и массивы Довольно часто встречаются случаи, когда необходимо работать с массивами указателей. Синтаксис объявления массива
- 16. Указатели и строки Объявление указателя на строку имеет тот же синтаксис, что и объявление указателя на
- 17. Указатели и строки Работа со строкой как с массивом символов посредством указателя ничем не отличается от
- 18. Указатели и строки Интересной является возможность объявления указателей на строки и их установка на строковые константы.
- 19. Указатели и строки Например, в следующем фрагменте программы на экран выводится сообщение “Положительное значение”, если значение
- 20. Указатели и перечисления Работа с указателями на перечислимый тип данных (enum) ничем не отличается от работы
- 21. Указатели и структуры Объявление указателя на структуры или объединения, а также установка указателя на структуры и
- 22. Указатели и структуры Отличие заключается в обращении к полям структуры (объединения) через указатели на эти структуры
- 23. Указатели и структуры Вычислить расстояние между двумя точками в двумерном пространстве (структура Point2D): Point2D pnt[2], *ptr1
- 24. Указатели и структуры Вычисление длины ломаной линии заданной массивом структур arr (структура Point2D) размера N через
- 25. Указатели и структуры Вычисление длины ломаной линии заданной массивом структур arr (структура Point2D) размера N через
- 26. Арифметика указателей В языке С доступны некоторые арифметические действия над типизированными указателями. Доступны следующие виды выражений:
- 27. Арифметика указателей Технически сложение (или вычитание) типизированного указателя и целого числа означает «сдвиг» указателя на определенное
- 28. Арифметика указателей Арифметика указателей наиболее часто применяется для доступа к элементам массивов. Например, вычисление суммы элементов
- 29. Арифметика указателей Цикл в последнем фрагменте программы можно записать и несколько иначе: for(int i=0;i
- 30. Арифметика указателей Еще одним вариантом арифметики указателей является вычитание указателя из другого указателя, в виде: целочисленная
- 31. Динамическая память Традиционно весь объем памяти компьютера во время его работы разделяют на следующие области: системная
- 32. Динамическая память Динамическая память – это область (блок) памяти выделенный для нужд программы в процессе работы
- 33. Динамическая память Функция выделения блока памяти: void * malloc(size_t size); Например, фрагмент программы выделения динамической памяти
- 34. Динамическая память Функция выделения блока памяти под массив: void * calloc(size_t num, size_t size); Например, фрагмент
- 35. Динамическая память Функция изменения размера выделенного ранее блока памяти: void * realloc(void *memblock, size_t size); Например,
- 36. Динамическая память Функция освобождения динамической памяти: void free(void *memblock); Например, освобождение блока памяти, выделенного под структуру
- 37. Динамическая память Помимо описанных функций для работы с динамической памятью (выделение и освобождение) на практике широко
- 38. Динамическая память Функция копирования содержимого одного блока памяти в другой блок: void * memcpy(void * restrict
- 39. Динамическая память Функция копирования содержимого одного блока памяти в другой блок: void * memmove(void *targetbuf, const
- 40. Динамическая память Функция сравнения двух блоков памяти: int memcmp(const void *buffer1, const void *buffer2, size_t num);
- 41. Динамическая память Функция заполнения блока памяти: void * memset(void *buffer, int c, size_t num);
- 42. Пример 1 Список точек в двумерном пространстве вводится пользователем: сначала указывается количество элементов в списке, а
- 43. Пример 1 #include #include #include int main(int argc, char *argv[]) { typedef struct{double x,y;} Point2D; int
- 44. Пример 1 int mins[2] = {0,1}, maxs[2] = {0,1}; double min = sqrt( pow(list[0].x-list[1].x,2.0)+ pow(list[0].y-list[1].y,2.0) ),
- 45. Пример 1 printf("MAX: (%.2lf,%.2lf) - (%.2lf,%.2lf) : %.2lf\n", list[maxs[0]].x,list[maxs[0]].y, list[maxs[1]].x,list[maxs[1]].y,max); printf("MIN: (%.2lf,%.2lf) - (%.2lf,%.2lf) : %.2lf\n",
- 46. Пример 2 Список окружностей (координаты центра и радиус) вводится пользователем: сначала вводится количество элементов в списке,
- 47. Пример 2 #include #include #include int main(int argc, char *argv[]) { typedef struct{double x,y,r;} CIRCLE; int
- 48. Пример 2 for(int i=0;i if(2.0*list[i].r*pi memcpy(&list[i],&list[i+1],sizeof(CIRCLE)*(num-i-1)); num--; i--; } list = (CIRCLE *)realloc(list,num); puts(“Результат: ”); for(int
- 49. Пример 3 Создать в динамической памяти вещественную матрицу размера N×M (вводятся пользователем). Осуществить ввод матрицы. Упорядочить
- 50. Динамическая матрица
- 51. Пример 3 #include #include #include int main(int argc, char *argv[]) { int n,m; printf("Введите размеры матрицы:
- 52. Пример 3 for(int i=0;i summs[i] = 0.0; matrix[i] = (double*)calloc(m,sizeof(double)); if(!matrix[i]){ for(int j=0;j free(matrix); free(summs); puts("Мало
- 53. Пример 3 int type = 0; printf("Введите 0– по возрастанию, не 0– по убыванию: "); scanf("%d",&type);
- 54. Пример 3 puts("Результат:"); for(int i=0;i for(int j=0;j free(matrix[i]); printf("\tSumma: %.3lf\n",summs[i]); } free(matrix); free(sums); return 0; }
- 55. Пример 4 Создать в динамической памяти массив строк. Строки вводятся пользователем, признак завершения ввода – ввод
- 56. Пример 4 #include #include #include int main(int argc, char *argv[]) { char **list = NULL; int
- 58. Скачать презентацию