- •3.Динамическая память. Указатели и массивы. Ссылочный тип.
- •5.Доступ к элементам массива. Вычисление размера массива. Многомерные массивы.
- •7.Использование new и delete на примере динамических
- •9.Символьные массивы и строковые функции. Массивы в
- •13.Условный оператор? . Оператор switch.
- •15.Классы (fstream, ofstream, ifstream, ostream, istream, ios) и представители классов потокового ввода-вывода.
- •19.Объявление переменных указателей. Простые операторы с указателями.
- •21.Оператор if. Оператор if-else. Вложенные операторы if-else. Оператор if-else-if.
- •23.Операции динамического распределения памяти.
- •25.Передача значений параметров по умолчанию. Передача параметров по ссылке и ссылочные переменные.
- •27.Приоритет переменных с файловой и локальной областями действия. Операция уточнения области действия.
- •29.Пространство имен. Операторы namespace и using.
23.Операции динамического распределения памяти.
В языке С для динамического выделения и освобождения памяти используются функции malloc() и free(). Вместе с тем С++ содержит два оператора, выполняющих выделение и освобождение памяти более эффективно и более просто. Этими операторами являются new и delete. Их общая форма имеет вид:
переменная_указатель = new тип_переменной;
delete переменная_указатель;
Здесь переменная_указaтель является указателем типа тип_переменной. Оператор new выделяет память для хранения значения типа тип_переменной и возвращает ее адрес. С помощью new могут быть размещены любые типы данных. Оператор delete освобождает память, на которую указывает указатель переменная_указатель.
Оператор delete следует использовать только для указателей на память, выделенную с использованием оператора new. Использование оператора delete с другими типами адресов может породить серьезные проблемы.
#include<iostream.h>
void main()
{char *name; //выделяем ячейку памяти для переменной
name=new char[64]; //name
cout<<"enter your name"<<endl;
cin>>name;
cout<<name<<endl;
delete name;//удаляем переменную,тем самым освобождаем занятую ячейку
}
С помощью new можно размещать массивы. Общая форма для одномерного массива имеет вид:
переменная_указатель = new тип_переменной [размер];
Здесь размер определяет число элементов в массиве. Необходимо запомнить важное ограничение при размещении массива: его нельзя инициализировать.
Для освобождения динамически размещенного массива необходимо использовать следующую форму оператора delete:
delete [] переменная_указатель;
Здесь скобки [] информируют оператор delete, что необходимо освободить память, выделенную для массива.
По умолчанию, если ваша программа не освобождает выделенную ей память до своего завершения, операционная система автоматически освобождает эту память после завершения программы. Однако если ваша программа использует оператор delete для освобождения памяти по мере того, как она (память) становится ненужной, то эта память вновь становится доступной для других целей (возможно, для вашей программы, которая опять будет использовать оператор new, или для операционной системы).
25.Передача значений параметров по умолчанию. Передача параметров по ссылке и ссылочные переменные.
По умолчанию С и С++ передает аргументы в функцию, используя передачу по значению. Это означает, что функция использует копии аргументов, благодаря чему предотвращается возможность модификации аргументов функции. Если требуется предоставить функции возможность изменять значения своих переменных-аргументов, то в языке С параметры должны быть объявлены явным образом как указатели. Тогда функция будет обрабатывать значения вызванных переменных, используя оператор *. //пример использования вызова функции по значениям указателей:
#include<iostream.h>
int fun(int* p);//prototip funkcii fun
void main()
{int k;//obyavlenie peremennoi k celogo tipe
k=10;//prisvaivanie k znacheniya 10
cout<<k<<endl;//vyvod znachenia k t.e. 10 vyvoditsya na ekran
cout<<fun(&k)<<endl;//vyzov funkcii fun po ssylke
}
int fun(int *p)//sams funkcia,telo
{*p=666;//peremennoi, na kotoruyu ssylaetsya dannyi ukazatel',prisvoeno znachenie 666
return *p;
}//результатом данной программы является вывод на экран значения переменной k до и после вызова функции, т.е. выводится 10,потом 666
В С++ можно создавать передаваемые по ссылке параметры. Для этого при объявлении функции перед параметром ставится знак амперсанта &. В качестве примера рассмотрим функцию: void f(int &f) { f = rand(); // изменяет переданный аргумент }
Обратим внимание, что инструкция f = rand(); не использует оператор *. При объявлении параметра-ссылки компилятор С++ знает, что это неявный указатель, и обрабатывает его соответствующим образом. Всякий раз при вызове функции f() ей автоматически передается адрес аргументов
//пример использования вызова функции по ссылке:
#include<iostream.h>
int fun(int& p);//prototip funkcii fun
void main()
{int k;//obyavlenie peremennoi k celogo tipa
k=10;//prisvaivanie k znacheniya 10
cout<<k<<endl;//vyvod znachenia k t.e. 10 vyvoditsya na ekran
cout<<fun(k)<<endl;//vyzov funkcii fun
}
int fun(int &p)//sams funkcia,telo
{p=666;
return p;
}
