Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке? Тип приложения - не Qt, Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.
|
Массивы
5.2 Динамические массивы в С(С++)
Для создания динамического массива необходимо [ "Предисловие" , "Строки в языке C++" ]:
- описать указатель (тип * указатель;);
- определить размер массива;
- выделить участок памяти для хранения массива и присвоить указателю адрес этого участка памяти.
Для выделения памяти в С++ можно воспользоваться оператором new или функциями языка С — calloc, malloc, realloc. Все функции находятся в библиотеке stdlib.h.
5.2.1 Функция malloc
Функция malloc выделяет непрерывный участок памяти размером size байт и возвращает указатель на первый байт этого участка. Обращение к функции имеет вид:
void* malloc ( size_t size );
где size — целое беззнаковое значение1size_t — базовый беззнаковый целочисленный тип языка С/С++, который выбирается таким образом, чтобы в него можно было записать максимальный размер теоретически возможного массива любого типа. В 32-битной операционной системе size_t является беззнаковым 32-битным числом (максимальное значение 232- 1), в 64-битной — 64-битным беззнаковым числом (максимальное значение 264- 1)., определяющее размер выделяемого участка памяти в байтах. Если резервирование памяти прошло успешно, то функция возвращает переменную типа void*, которую можно преобразовать к любому необходимому типу указателя. Если выделить память невозможно, то функция вернёт пустой указатель NULL.
Например,
double *h; //Описываем указатель на double. int k; cin>>k; //Ввод целого числа k. //Выделение участка памяти для хранения k элементов типа double. //Адрес этого участка хранится в переменной h. h=(double *) malloc ( k* sizeof ( double ) ); //h — адрес начала участка памяти, //h + 1, h + 2, h + 3 и т. д. — адреса последующих элементов типа double
5.2.2 Функция calloc
Функция calloc предназначена для выделения и обнуления памяти.
void * calloc ( size_t num, size_t size );
С помощью функции будет выделен участок памяти, в котором будет храниться num элементов по size байт каждый. Все элементы выделенного участка обнуляются. Функция возвращает указатель на выделенный участок или NULL при невозможности выделить память.
Например,
float *h; //Описываем указатель на float. int k; cin>>k; //Ввод целого числа k. //Выделение участка памяти для хранения k элементов типа float. //Адрес этого участка хранится в переменной h . h=( float *) calloc ( k, sizeof ( float ) ); //h — адрес начала участка памяти, //h + 1, h + 2, h + 3 и т. д. — адреса последующих элементов типа float.
5.2.3 Функция realloc
Функция realloc изменяет размер ранее выделенного участка памяти. Обращаются к функции так:
void *realloc ( void *p, size_t size );
где p — указатель на область памяти, размер которой нужно изменить на size. Если в результате работы функции меняется адрес области памяти, то новый адрес вернётся в качестве результата. Если фактическое значение первого параметра NULL, то функция realloc работает так же, как и функция malloc, то есть выделяет участок памяти размером size байт.
5.2.4 Функция free
Для освобождения выделенной памяти используется функция free. Обращаются к ней так:
void free ( void *p );
где p — указатель на участок памяти, ранее выделенный функциями malloc, calloc или realloc.
5.2.5 Операторы new и delete
В языке С++ есть операторы new для выделения и delete для освобождения участка памяти.
Для выделения памяти для хранения n элементов одного типа оператор new имеет вид [5]:
x=new type [ n ];
type — тип элементов, для которых выделяется участок памяти;
n — количество элементов;
x — указатель на тип данных type, в котором будет храниться адрес выделенного участка памяти.
При выделении памяти для одного элемента оператор new имеет вид:
x=new type;
Например,
float *x; //Указатель на тип данных float . int n; cin>>n; //Ввод n //Выделение участка памяти для хранения n элементов типа float. Адрес этого участка хранится //в переменной x; x+1, x+2, x+3 и т. д. — адреса последующих элементов типа float.
Освобождение выделенного с помощью new участка памяти осуществляется с помощью оператора delete следующей структуры:
delete [ ] p;
p — указатель (адрес участка памяти, ранее выделенного с помощью оператора new).