В языке C++ существуют объекты, которые называются указателями. Значениями указателей служат адреса участков памяти, выделенных для объектов конкретных типов. Поэтому в определении указателя всегда присутствует обозначение соответствующего типа. Выделяют указатели на объекты и указатели на функции (с ними мы познакомимся чуть позже). Рассмотрим указатели на объекты. В простейшем случае определение и описание указателя имеет следующий вид:
тип_указателя *имя_указателя;
Например, int *pointer;
Обычно, при определении указателя производят и инициализацию указателя:
тип_указателя *имя_указателя инициализатор;
В языке С++ понятия указателей, массивов и строк тесно связаны. Существует операция взятия адреса (), с помощью которой можно узнать адрес переменной в памяти.
Переменная, в которой хранится адрес, например, переменная pi_address, называется
//==========================================================
// Name : pointer.cpp
// Author : Marat
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//==========================================================
#include <iostream>
using namespace std;
int main() {
//Определили и инициализировали переменную pi
double pi=3.14159;
//Определеили и инициализировали указатель на переменную pi
double *pointer_pi=π
//Значение переменной pi
cout<<"\npi="<<pi;
//Адрес переменной а
cout<<"\npointer_pi="<<pointer_pi;
//Разыменование указателя
cout<<"\n*pointer_pi="<<*pointer_pi;
cout<<"\n"<<endl;
//Определили и инициализировали переменную pi
double e=2.718182;
//Определеили указатель на переменную e
double *pe;
//Инициализировали указатель на переменную pi
pe=e;
cout<<"\ne="<<e;
cout<<"\npe="<<pe;
cout<<"\n*pe="<<*pe;
cout<<"\n"<<endl;
return 0;
}
Результат:
pi=3.14159 pointer_pi=0x0066FDF0 *pointer_pi=3.14159 e=2.718182 pointer_e=0x0066FDE4 *pointer_e=2.71818
Очень часто указатели используются при работе с массивами. Известно, что имя массива представляет собой константу, значение которой равно адресу первого элемента.
Строки являются массивами символов (тип char). Так как указатель типа char может хранить адрес символа, такой указатель можно объявить и инициализировать, а затем по имени указателя вызывать символьный массив.
//==========================================================
// Name : pointer_char.cpp
// Author : Marat
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//==========================================================
#include <iostream>
using namespace std;
int main() {
char *name="Marat";
cout<<"\nHi! What is your name?";
cout<<"\nMy name is "<<name<<endl;
return 0;
}
Результат:
Hi! What is your name? My name is Marat
В следующем примере демонстрируется использование указателей на символьные массивы для того, чтобы написать фразу задом наперед, при этом использовалась библиотечная функция strlen из библиотеки string.h для вычисления длины строки.
//==========================================================
// Name : pointer_string.cpp
// Author : Marat
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//==========================================================
#include <iostream>
using namespace std;
#include<string.h>//Библиотека работы со строками
int main() {
char *a="A ROZA UPALA NA LAPU AZORA";
//strlen() - библиотечная функция подсчета длины строки.
//Так в конце строки находится последний пустой символ,
//от величины n вычитается единица
int n= strlen(a)-1;
for (int i=n;i>=0;i--)
{
cout<<a[i];
}
cout<<"\n"<<endl;
for (int i=0;i<=n;i++)
{
cout<<a[i];
}
cout<<"\n"<<endl;
return 0;
}
Результат:
AROZA UPAL AN ALAPU AZOR A A ROZA UPALA NA LAPU AZORA
В другом примере используются указатели на вещественные массивы, где они (указатели на вещественные массивы) выступают в качестве аргументов функций. Подробнее о функциях речь пойдет ниже.
//==========================================================
// Name : pointer_to_array.cpp
// Author : Marat
// Version :
// Copyright : Your copyright notice
// Description : Hello World in C++, Ansi-style
//==========================================================
#include <iostream>
using namespace std;
void print(double *a, int array_size)
{
for(int i=0;i<array_size;i++)
{
cout<<"\na["<<i+1<<"] = "<<a[i];
}
cout<<"\n"<<endl;
}
int main() {
void print(double *a, int array_size);
double a[]={1.3, 4, 5.8, -3.6, 3.16};
int array_size=sizeof(a)/sizeof(a[0]);
print(a, array_size);
return 0;
}
Результат:
a[1]=1.3 a[2]=4 a[3]=5.8 a[4]=-3.6 a[5]=3.16
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.