Еще одним составным типом являются указатели. Подобно ссылкам, указатели используют для косвенного доступа к объектам. В отличие от ссылок, указатель - настоящий объект.

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

В определении указателя используется оператор в форме *имя

int *point1, *point2;
double *point3; //все три указателя неопределенны

Указатель содержит адрес другого объекта. Для получения адреса объекта используется оператор обращения к адресу &

int count = 10;
int *point1 = &count; // point1 содержит адрес
 // *point1 содержит значение

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

Тип указателя и объекта должны совпадать.

#include <iostream>
using namespace std;

int main()
{ 
 setlocale(LC_ALL, "Russian"); 
 int num1 = 10, num2 = 25;
 
 int *pointer1 = &num1; //указатель на num1
 int *pointer2 = &num2; //указатель на num2
 
 *pointer1 = 5; //num1 теперь равен 5
 *pointer2 = 15;
 pointer2 = &num1; //указатель теперь указывает на num1
 
 
 cout << "num1: " << num1
 << "\nnum2: " << num2
 << "\npointer1: " << pointer1
 << "\npointer2: " << pointer2
 << "\n*pointer1: " << *pointer1
 << "\n*pointer2: " << *pointer2 << endl;
 return 0;
}

Результат программы:

num1: 5
num2: 15
pointer1: 0x770fded25cdc
pointer2: 0x770fded25cdc
*pointer1: 5
*pointer2: 5

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


 Похожие публикации
2016-01-31 • Просмотров [ 179 ]