Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






II способ присваивания указателю адреса области памяти в явном виде





Char*pv=(char*)

III способ присваивания пустого значения

Int*p=null;

Null-const; определителя в некоторых заголовках файлов, как указатель =0.

Ссылка.

Ссылка представляет собой синоним имени, указанного при инициализации ссылки.

тип & имя.

тип - тип величины, на которую указывает ссылка.

H: int kol

int & pal = kol;

const char & cr = "\n";

Правила.

1)Переменная ссылка должна явно инициализироваться при ее описании, кроме случаев, когда она является параметром функции.

2)После инициализации ссылке не может быть присвоена другая переменная

3)Тип ссылки должен совпадать с типом величины, на которую она ссылается.

4)Не разрешается определять указатели на ссылки, ссылки на ссылки и создавать массивы ссылок.

5)Ссылки чаще всего используются в качестве параметров функций и типов, возвращаемых функцией значений. Ссылки позволяют и использовать в функциях переменные по адресу без операции разадресации.

Идентификатор(имя) массива является константой указателем на его нулевой элемент.

int b[10];

&b[0]b-адрес нулевого элемента массива=>к элементу массива можно обратится, как к указателю.

*b=b[0]

*(b+1)=b[1]

*(b+c)=b[i]

 

 

int a[100],b[100];

int *pa=a;

int *pb=b;

for (int i=0; i<100; i++)

*pb++=*pa++;(pb[i]=pa[i])

Копирование массива a в массив b через указатель. При инициализации многомерного массива он представляется либо как массив из массивов, при этом каждый массив заключается в свои фигурные скобки, и левую размерность при описании можно не указывать.

int mas[][2]={{1;0},{2,3},{4,5}}

Либо задается общий список элементов в том порядке, ко вторым они располагаются в памяти, а располагаются они построчно

int mas [3][2]={0,1,2,3,5,8}

Динамические массивы.

Динамические массивы создаются с помощью операции new, при этом оказывается тип и размерность массива.

H:int n=10;

double*mas;

mas=new double[n];

Многомерные динамические массивы.

1)Для создания динамического массива в операторе new необходимо указать все его размерности.Число строк может быть переменным.

int nstr = 5;

int **m=(int**) new int [nstr][10]

2)Выделение памяти: int nstr,nstb;

cin>>nctr>>nstrb;

1)) int **mas=new int*[nstr];

for (int i=0;i<nstb;i++)

2)) mas [i] = new int[nstb];

В строке 1 объявляется переменная типа указатель на указатель на int. В этой же стр. выделяется память под массив указателей.

Оператор 2 выделяет память под каждую стр. массива и каждому значению элемента mas указателей присваивается адрес нового mas целых чисел количества nstb.

mas [i][j]

Функции.

Функции - это поименованный набор описаний и операторов, выполняющих определенную задачу.

Информация, передаваемая в функцию для образботки называется параметром, а результат функции - значением этой функции.

Обращение к функции называется вызовом.

Функция имеет вид: тип имя_функции(список параметров)

{

тело функции

}

Тип- это тип, возвращаемого функцией, значения.Если функция не возвращает значения, значит указывается тип void.Список параметров - это список, передаваемых в функцию величин, отделяемых друг от друга запятой. Для каждой величины указывается ее тип и имя. если параметров нет, ставятся пустые скобки.

При использовании функции в программе, структура программы может быть записана 2мя способами.

Директивы компилятора.

тип 1: имя функции 1(...)

{

тело функции

}

тип 2: имя функции 2(...)

{

тело функции

}

int main()

{

}

Директива компилятора.

тип 1 - имя функции 1(параметры),

тип 2 - имя функции 2(параметры),

int main()

{...

}

тип 1: имя функции 1(параметры)

{

тело функции

}

тип 2: имя функции 2(параметры)

{

тело функции

}.......

Во 2ом способе заготовки функций перед main называется прототипами функций.

Прототип даёт компилятору тип возвращаемого функцией значений, типы параметров и порядок их следований. В прототипах функции можно не писать имена параметров, а только типы.

int f1(int a, int b);

или } - только в прототип.

int f1(int,int);

Вызов функции осуществляется с помощью указания имени функции и списка фактических параметров в скобках.

cout << f1(3,8);

int = f1(x,y+u);

Если тип возвращаемого значения на void, то функция может входить в состав выражения.

Для того, чтобы функция вернула какое либо значение, в ней должен быть оператор return(выражение)

Все величины, описанные внутри функции, а так же ее параметры являются локальными. Областью их действия является функция. При вызове функции в стеке памяти выделяется память под локальные переменные, при выходе из функции эта память освобождается и значение теряется. Если необходимо сохранить значение локальной переменной между вызовами функции, то при объявлении локальной переменной используется модификатор static.

H: #include

void f(int a){

int m=0;

cout<<"n m p \n";

while (a--0){

static int n=0;

int p =0;

cout << n++<<" "<<m++<<" "<<p++<<"\n";

}

}

int main()

{f(3);f(2);

return 0;

}

Формат работы программы.

1)n m p

0 0 1

1 1 0

2 2 0

2)n m p

3 0 0

4 1 0

При совместной работе функции должны обмениваться информацией, это возможно через параметры, через возвращаемое значение и через глобальные переменные.

Глобальные переменные, которые объявляются до объявления всех функций и являются доступными для всех функций.

Если в функции описана локальная переменная с тем же именем, что и глобальная, то локальная заблокирует глобальную.

При необходимости обращения к глобальным переменным нужно поставить перед ней операцию расширения видимости.

 

 

Замечание!

Нельзя возвращать из функции указатель на локальную переменную, поскольку код под локальную переменную освобождается при выходе из функции.

int*f() результат - указатель

{int a=s;

return a, } не допустимо!!!

}

Параметры функции

Параметры в заголовке функции. перечисленные при ее описании называются формальными параметрами. а при вызове функции - фактическими параметрами.

При вызове функции сначала вычисляется выражения, стоящие на месте параметров, затем выделяется память под формирование параметры в соответствии с их типом и каждому из них присваивается значение фактического параметра.

 

Существует 2 способа передачи параметров в функцию: по значению и по адресу.

При передаче по значению операции функции работают с копиями значений аргумента.

Доступа к исходным значениям функции нет, т.е. функция не может их изменить.

При передаче по адресу фактического параметра.

Функция осуществляет доступ к ячейке памяти по этому адресу и может изменить исходящее значение аргумента.

H: #include

void f(int i,int*j,int & k);

int main()

{

int i=1,j=2,k=3;

cout << i,j,k,"\n';

cout<<i<<y<<k<<"\n";

f(i,j,k);

cout << i << " "<< j <<" "<<k<<"\n";

return 0;

}

void f(int i,int*J,int & k)

{i++;(*j)++;k++;}

 

i y k

1 2 3

1 3 4

 

Параметр i передается по значению. 2ой параметр передается по адресу с помощью указателя. Для передачи адреса фактического параметра используется &,для получения значения в функции обязательно операция *(разыменование).3ей параметр передается по адресу с помощью ссылки. При передаче по ссылке в фунецию передается адрес параметра, а внутри фунции все обращается к параметру не явно разыменовываются.Если требуется запретить изменения параметра внутри функции, используется модификатор "const".

H: void(const int*j);

Передача массивов в качестве параметров.

mas в C++ - указатель на первый элемент.

При использовании в качестве параметра массива в функцию передается указатель на его 1ый элемент, т.е. массив всегда передается по адресу. При этом теряется информация о количестве элементов массива, т.к. размерность необходимо тоже передавать через отдельный параметр.

 

 

Передача многомерных массивов

Все размерности должны передаваться в качестве параметров.

Параметры со значением по умолчанию.

Значения параметров по умолчанию должны быть последними в списке и могут опускаться при вызове функции. Если какой-либо параметр при вызове функции опущен, то должны быть опущены и все параметры, идущие после него.

Перегрузка функции.

Перегрузкой функции называется исполнение нескольких файлов с одним и тем же именем, но разными типами параметров. Компилятор определяет какую функцию вызвать по типу фактических параметров.

 

Неоднозначность:

1)при преобразовании типов

2)при исполнении параметров ссылок

3)при исполнении аргументов по умолчанию

1)float f(float t)

{cout<<function float f(float i)";

return i;

2)int f(int a;int b)

int f(int a;int & b)

3)int f(int a) {return a;}

int f(int a;int b=10 {return a*b;}

int main(){

cout<<f(10,2);

cout<<f(10); -ошибка.неоднозначность при вызове!

return 0;

}

Правила описания перегрузки функций

1)Перегруженные функции должны находиться в одной областной видимости.

2)Перегруженные функции могут иметь параметры по умолчанию, при этом значение одного и того же параметра в раных функциях должны совпадать.Вразных вариантах перегрузки функций может быть различие параметров по умолчанию

3)Функции не могут быть перегружены, если описание их параметров отличается только модификатором const или использованием ссылки.

Текстовые файлы.

Для работы с файлами исполняются специальные типы данных, называющиеся потоками. Поток ifstream служит для работы с файлами в режиме чтения.Поток ofstream - в режиме записи. Для работы с файлами в режиме, как чтения,так и записи служит поток fstream.

В программах на C++ при работе с текстовыми файлами необходимо подключить библиотеки: iostream, fstream.

Для того, чтобы записывать данные в текстовый файл необходимо:

1)Описывать переменную типа ofstream.

2)Открыть файл с помощью функции open.

3)Вывести информацию в файл.

4)Обязательно закрыть файл(close.fail)

Для считывания данных из текстового файла необходимо:

1)Описать переменную типа ifstream

2)Открыть файл с помощью функции open.

3)считать информацию из файла, при считывании каждой порции данных необходимо проверить, достинут ли конец файла

4)Закрыть файл.

 

Date: 2015-09-22; view: 390; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.005 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию