ЛЕКЦИЯ № 10
Указатели и ссылки
Оперативная память компьютера разделена на последовательно пронумерованные ячейки. Каждая переменная размещается в одной или нескольких последовательно расположенных отдельных ячейках памяти, адрес первой из них называется адресом переменной. Каждая ячейка в оперативной памяти занимает один байт или 8 бит. Ниже схематически представлено размещение переменной X=5 типа short int (размер 2 байта) в оперативной памяти компьютера.
Оперативная память компьютера разделена на последовательно пронумерованные ячейки. Каждая переменная размещается в одной или нескольких последовательно расположенных отдельных ячейках памяти, адрес первой из них называется адресом переменной. Каждая ячейка в оперативной памяти занимает один байт или 8 бит. Ниже схематически представлено размещение переменной X=5 типа short int (размер 2 байта) в оперативной памяти компьютера.
Указатель (pointer) – это переменная, хранящая адрес другой переменной (другого объекта). Размер всех указателей равен 4 байтам. Адрес можно получить с помощью оператора обращения к адресу (&). Ниже приведена программа, которая выводит адреса переменных.
#include <iostream> #include <stdio.h> using namespace std; int main()
{
//объявление и инициализация переменной a типа bool bool a = 2;
//объявление и инициализация переменной b типа int int b;
//объявление и инициализация переменной c типа long int long int c;
//вывод на экран адреса переменной a cout <<"adress a="<<&a<<endl; //вывод на экран адреса переменной b cout <<"adres b="<<&b<<endl;
//вывод на экран адреса переменной c
cout <<"adres c="<<&c<<endl;
return 0;
}
После запуска программы на выполнение, на экране можно увидеть адреса переменных.
Следует иметь в виду, что результат зависит от характеристик компьютера.
Объявить указатель можно следующим образом:
Тип * переменная
Компилятор различает тип переменной, адрес которой будет храниться в указателе. При несовпадении типов будет выдано сообщение об ошибке. После объявления указателю желательно присвоить какое- либо значение, например 0. Не следует использовать неинициализированные указатели. Например, фрагмент кода программы:
//объявление целочисленной переменной x int x=5;
//объявление указателя px целочисленного типа int * px=0;
//присвоение значению указателя px адреса переменной x px=&x; схематично можно представить следующим образом:
Пример программы с использованием указателей:
#include <iostream> #include <stdio.h> using namespace std; int main()
{
//объявление и инициализация переменной a типа bool bool a = 0;
//объявление и инициализация переменной b типа int int b=12;
//объявление и инициализация переменной c типа long int long int c=123456789;
//объявление и инициализация указателя pa типа boolbool *pa=0;
//объявление и инициализация указателя pb типа int int *pb=0;
//объявление и инициализация указателя pc типа long int
long int *pc=0;
//указателю pa типа bool присваивается адрес переменной a типа bool pa=&a;
//указателю pb типа int присваивается адрес переменной b типа int pb=&b;
//указателю pc типа long int присваивается адрес переменной b типа long int pc=&c;
//вывод на экран адреса переменной a cout <<"adres a="<<&a<<endl;
//вывод на экран адреса переменной b cout <<"adres b="<<&b<<endl;
//вывод на экран адреса переменной c cout <<"adres c="<<&c<<endl;
//вывод на экран значения указателя pa cout <<"pointer pa="<<pa<<endl
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.