На этой практике продолжаем разбираться с указателями. Но в отличие от предыдущей практики, где мы использовали автоматическую память, мы рассмотрим использование динамического выделения памяти на куче. После этой практики вы должны уметь без Google объяснить:
malloc
, calloc
, free
и как ими пользоваться.malloc
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int* arr; // жил да был указатель
arr = malloc(sizeof(int)); // и выделили для одного int место в памяти
*arr = 42; // и положили туда 42
printf("%p %d\\n", arr, *arr); // и напечатали адрес его на экране, как и само содержимое памяти
free(arr); // и очистили память
// и тут решили создать массив!
size_t n = 10*10;
arr = calloc(sizeof(int), n); // выделили память на массив размера n элементов, каждый по sizeof(int) байт.
for (int i = 0; i < n;i++) {
arr[i] = i*10; // заполнили его числами 0, 10, 20...,990
}
for (int i = 0; i < n; i++) {
printf("%d %d\\n", *(arr+i), arr[i]); // а это одно и то же
}
free(arr);
}
malloc
, calloc
, realloc
, free
, printf
, scanf
.main
ТОЛЬКО тестирование работоспособности функции.free
.