Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Топ:
Оценка эффективности инструментов коммуникационной политики: Внешние коммуникации - обмен информацией между организацией и её внешней средой...
Выпускная квалификационная работа: Основная часть ВКР, как правило, состоит из двух-трех глав, каждая из которых, в свою очередь...
Генеалогическое древо Султанов Османской империи: Османские правители, вначале, будучи еще бейлербеями Анатолии, женились на дочерях византийских императоров...
Интересное:
Отражение на счетах бухгалтерского учета процесса приобретения: Процесс заготовления представляет систему экономических событий, включающих приобретение организацией у поставщиков сырья...
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Подходы к решению темы фильма: Существует три основных типа исторического фильма, имеющих между собой много общего...
Дисциплины:
2017-10-21 | 283 |
5.00
из
|
Заказать работу |
|
|
Чтобы присвоить значение элементу или обратиться к значению элемента, используйте оператор C++ точку (.). Например, следующие операторы присваивают значения различным элементам переменной с именем worker тута employee;
worker.employee_id = 12345;
worker.salary = 25000.00;
worker.оffice_number = 102;
Указатели и соответствующие операции
Указатель -это переменная, значением которой является адрес другой переменной. Так как указатель может ссылаться на переменные разных типов, с указателем в языке Си связывается тип того объекта, на который он ссылается. Для описания указателей используется операция косвенной адресации *. Например, указатель целого типа uk описывается так: int *uk.
Унарная операция &, примененная к некоторой переменной, показывает, что нам нужен адрес этой переменной, а не ее текущее значение. Если переменная uk объявлена как указатель, то оператор присваивания uk=&x означает: " взять адрес переменной x и присвоить его значение переменной-указателю uk ".
Унарная операция *, примененная к указателю, обеспечивает доступ к содержимому ячейки памяти, на которую ссылается указатель. Например, *uk можно описать словами как " то, что содержится по адресу, на который указывает uk ". Указатели могут использоваться в выражениях. Если, например, переменная uk указывает на целое x, то *uk может во всех случаях использоваться вместо x; так, *uk+1 увеличивает x на единицу, а *uk=0 равносильно x=0. Два оператора присваивания uk=&x; y=*uk; выполняют то же самое, что и один оператор y=x. Польза от применения указателей в таких ситуациях, мягко выражаясь, невелика.
Пример
/*обмен a и b */ void obmen(int *x,int *y) { int t; t=*x; *x=*y; *y=t; } #include <iostream.h> void main() { int a,b; a=3;b=7; obmen(a,b); cout<<"a=”<<a<< “b="<<b; } |
Указатели и массивы
|
Наиболее полно их преимущества при обработке массивов и, в частности, символьных строк. Указатели и массивы тесно связаны друг с другом. Прежде чем рассмотреть эту связь подробно, заметим, что если uk - некоторый указатель, то uk++ увеличивает его значение и он теперь указывает на следующий, соседний адресуемый объект. Значение uk используется в выражении, а затем увеличивается. Аналогично определяются операции uk--, ++uk, --uk. В общем случае указатель uk можно складывать с целым числом i. Оператор uk+=i передвигает ссылку на i элементов относительно текущего значения. Эти конструкции подчиняются правилам адресной арифметики.
А теперь вернемся к массивам. Пусть имеется описание int a[5]; Оно определяет массив размером 5 элементов, т.е. пять последовательно расположенных ячеек памяти a[0], a[1], a[2], a[3], a[4]. Адресс i -го элемента массива равен сумме адреса начального элемента массива и смещения этого элемента на i единиц от начала массива. Это достигается индексированием: a[i]-i -й элемент массива. Но доступ к любому элементу массива может быть выполнен и с помощью указателей, причем, более эффективно. Если uk -указатель на целое, описанный как int *uk, то uk после выполнения операции uk=&a[0] содержит адрес a[0], а uk+i указывает на i -й элемент массива. Таким образом, uk+i является адресом a[i],а *(uk=1) - содержимым i- го элемента(операции * и & более приоритетны, чем арифметические операции). Так как имя массива в программе отождествляется с адресом его первого элемента, то выражение uk=&a[0] эквивалентно такому: uk=a. Поэтому значение a[i] можно записать как *(a+i). Применив к этим двум элементам операцию взятия адреса, получим, что &a[i] и a+i идентичны.
При определении статического массива:
тип имя_массива [количество_элементов] имя_массива
становится указателем на область памяти, выделяемой для размещения элементов массива. Количество элементов должно быть константой. Таким образом, размеры памяти, выделяемой под массив, заданы в определении массива. Но иногда нужно, чтобы размеры памяти были не фиксированными, а выделялись в ходе выполнения программы при решении конкретной задачи.
|
Формирование массивов с переменными размерами можно организовать с помощью указателей и средств для динамического выделения памяти. Эти средства описаны в библиотеке <alloc.h>. Функции malloc() и calloc() динамически выделяют память в соответствии со значениями их параметров и возвращают адрес начала выделенного участка памяти. Тип возвращаемого значения указателя void *. Его можно преобразовать к указателю любого типа с помощью явного приведения типа. Функция free(void *) освобождает память, выделенную с помощью malloc() или calloc().
int *p;
p=(int *)malloc(size); //Указателю на целое p присваивается адрес начала выделенной области памяти размером size байт.
p=(int *)calloc(n, size); //Указателю на целое p присваивается адрес начала выделенной области памяти размером n*size байт.
free(p); //Освобождает выделенную по адресу p память.
Преобразование указателя любого типа к типу void * осуществляется автоматически, так что в качестве фактического параметра можно подставить указатель любого типа без явного приведения типов.
Пример формирования одномерного динамического массива
#include <alloc.h>
main()
{ float *p,d;
int i,n;
cout<<”vv n”;
cin>>&n;
p=(float *)malloc(n*sizeof(float));
for (i=0;i<n;i++)
{cout<<"x[d]="<<i;
cin>>,&d;
p[i]=d;
}
for (i=0;i<n;i++)
{ if (i%4==0) cout<<"\n";
cout<<"\t x[d]="<<i<<p[i]);
}
free(p);
getch();
}
Если в качестве функции передается имя массива, то оно фактически определяет адрес начала массива, т.е. является указателем.
Классы.
Класс - составной тип данных, элементами которого являются функции и переменные. В основу понятия класс положен тот факт, что «над объектами можно совершать различные операции». Свойства объектов описываются с помощью полей классов, а действия над объектами описываются с помощью функций, которые называются методами класса. Класс имеет имя, состоит из полей, называемых членами класса и функций - методов класса.
Описание класса имеет следующий формат:
class name // name – имя класса
{
private:
// Описание закрытых членов и методов класса
protected:
// Описание защищенных членов и методов класса
public:
// Описание открытых членов и методов класса
}
|
|
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
Биохимия спиртового брожения: Основу технологии получения пива составляет спиртовое брожение, - при котором сахар превращается...
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!