return 0; }
... free(a);
malloc - не инициализирует
calloc - функция для выделения ОЗУ, после выделения ОЗУ инициализирует выделенную память нулями.
void* calloc(size_t n, size_t element size)
1-й аргумент - количество элементов
2-й аргумент - размер элемента
realloc - автоматически освобождает ОЗУ. Она позволяет изменить размер ранее выделенной памяти и получает в качестве аргументов старый указатель и новый размер памяти в байтах.
free - ничего не возвращает, имеет тип void
free(NULL) - безопасная функция, ничего не произойдёт.
Выделение памяти в C++
stdlib - заголовочный файл
malloc и free также присутствуют в C++.
Оператор new тоже выделяет ОЗУ,а также используется для создания новых объектов.
int* a = new int; int* b = new int[10];
delete a - очистка памяти для переменных delete [] b - очистка памяти для массивов
a=new(std::nothrow) int if(a==nullptr)
{
std:: cout<<"Error!";
return 1;
}
Адресная арифметика
Если прибавить к указателю константу, то значение указателя изменится на:
константа*размер указателя
Можно:
1) Вычитать указатель из указателя
2) Прибавить константу к указателю 3) Вычесть константу из указателя
4) Инкрементировать и декрементировать указатель
Структуры
Структура - конструкция языков программирования C и C++, представляющая собой совокупность переменных (полей) с возможностью доступа к каждому полю. Описание структуры не занимает ОЗУ.
struct Student
{
char Name[100];
int Group;
}
Полем структуры не может быть эта же структура.
Описание структуры:
1) Локальное 2) Глобальное
struct Student a; scanf("%[^\n]s", a.Name);
scanf("%zu", &a.Year);
struct Student Group2364[25];
for(i=0;i<sizeof(Group2364)/sizeof(Group2364[0]);i++) {
scanf("%[^\n]s", Group2364[i].Name);
scanf("%zu", &Group2364[i].Year);
}