- •Билет 1.Принципы архитектуры фон Неймана. Центральная и периферийная части компа. Архитектура процессора. Команды процессора. Процессор и память. Адресация. Адресное пространство.
- •Билет 3. Создание программного обеспечения. Язык программирования с. Структура с-программы. Создание программы на языке с.Основы синтаксиса с.
- •123000- 3 Значащих цифры; 0.045 – 2 значащих цифры.Символы. Кодирование символов.
- •Билет 5. Объявление и определение переменных. Перечисления.
- •Билет 6. Массивы. Доступ к элементам массива. Строки. Многомерные массивы.
- •Билет 11. Динамическое распределение памяти. Размещение переменных в памяти.
- •Билет 12. Оператор языка с. Числовые константы. Знаковые операторы. Знаковые операторы (унарный «плюс» и унарный «минус»).
Билет 11. Динамическое распределение памяти. Размещение переменных в памяти.
В динамической памяти, как правило, размещаются переменные, которые используются эпизодически и требует большого объема памяти. В стандартной библиотеке имеются функции для управления динамической памятью. К ним относятся malloc(выделение памяти), realloc(изменение размера блока памяти) и free(освобождение памяти). В функцию malloc передается через размер требуемой памяти и она возвращает адрес выделенного блока адрес выделенного блока( или NULL если выделение невозможно). Для динамического выделения памяти в С используется библиотечная функция malloc(), которая резервирует заданный размер блока памяти и возвращает указатель на этот блок. Указатель возвращается неопределенного типа (void*), который приводится к требуемому типу данных.
int *x; int n = 100; x = (int*)malloc(n*sizeof(int)); x[0] = 10; x[1] = 20;
Функция realloc передается адрес блока и новый размер, она возвращает новый адрес, при этом старые данные копируются по новому адресу. Для перераспределения ранее выделенной памяти в С используется библиотечная функция realloc(), которая изменяет размер блока памяти.
int *x = (int*)malloc(100*sizeof(int)); ... x = (int*)realloc(x, 500*sizeof(int)); ... free(x);
В функцию free передается адрес блока, который может быть высвобожден. Для освобождения ранее выделенной памяти в С используется библиотечная функция free(), которая делает блок памяти доступным для использования в других местах программы.
int *x; int n = 100; x = (int*)malloc(n*sizeof(int)); x[0] = 10; x[1] = 20; ... free(x);
Пример работы с динамической памятью:
Int *x=(int*)malloc(10000*sizeof(int)); // выделение памяти
x[0]=10;
x[1]=20;
x=(int*)realloc(x, 20000*sizeof(int)); // изменение размера
x[19999]=x[0]+x[1]; //ячейка 19999
free(x);
В языке С++ для динамического выделения памяти может использоваться оператор new. Для освобождения памяти используется оператор delete.
Double *a=new double; // выделение памяти под тип double
int *x=new int[100]; // выделение памяти под массив int
Person *p=new Person; //выделение памяти под структуру Person
delete a; // освобождение памяти
delete[] x; // освобождение памяти массива ( с [])
delete p; // освобождение памяти
Нельзя смешивать концепции malloc/free и new/delete, поскольку при этом задействуются различные механизмы управления памятью. Т. Образом память выделенную с помощью malloc, можно высвобождать только с помощью free, а выделенную с помощью new- только с помощью delete.
int A;
int B = 999;
void f() { int C;
int *D = new int[8]; *D = A+B+C; register int i; }
Билет 12. Оператор языка с. Числовые константы. Знаковые операторы. Знаковые операторы (унарный «плюс» и унарный «минус»).
Для выполнения различных операций над переменными и константами в языке С имеется набор операторов, которые по назначению можно отнести к:1)знаковые;2) арифметические;3) присваивания; 4) отношения;5) логические;6)доступа;7) побитовые;8)прочие.
Все операторы можно систематизировать по группам в зависимости от того, со сколькими операндами они работают: 1) унитарные( один операнд);2)бинарные(два операнда); 3) тернарные( три операнда).
К знаковым операторам относится унитарный плюс и унитарный минус. Эти операторы позволяют присваивать знак арифметическим выражениям. Поскольку по умолчанию все числа воспринимаются как положительные, унарный плюс практически не используется. Пример знаковых операторов:
int a= -5;
float b=+45.67;
double c= -b;
Таким образом: + значение операнда без изменения знака
- значение операнда с противоположным знаком
Унитарным операторам «+» или «-» можно присваивать знаки величинам арифметических типов. Если перед величиной не указан знак, то значение по умолчанию считается положительным.
Числовые константы. Целочисленные константы могут записываться в десятичном, восьмеричном и шестнадцатеричном видах. Восьмеричные константы начинаются с нуля, шестнадцатеричные- с 0х или 0Х.
Вещественные константы включают децимальную точку и могут использовать экспоненциальный формат (e или E).
Примеры:
int a = 15; int b = 015; int c = 0x15; int d = 0X15; float e = 5.67; float f = .25; float g = 5.67e4; float h = 2E-2;