Объявление указателей и работа с адресами
Указатели
Объявление указателей и работа с адресами
Указатель – это производный тип данных, позволяющий обращаться к адресам в памяти компьютера. Если переменная объявлена как указатель, она может хранить адрес и таким образом указывать на расположенное по этому адресу значение.
При объявлении переменной-указателя последовательно указываются тип данных, адреса которых будет содержать переменная, звездочка и имя переменной-указателя, например,
int * iptr;
объявляет переменную iptr как указатель на значение целого типа. Это означает, что значение переменной iptr будет рассматриваться как адрес, по которому расположено значение типа int.
Получение адресов переменных программы обеспечивает специальная операция &.
Предположим, что в программе объявлена переменная i типа int:
int i;
Тогда ранее объявленной переменной-указателю iptr можно присвоить адрес переменной i:
iptr = &i;
После выполнения этого оператора переменная iptr будет хранить адрес переменной i.
Обратиться к значению переменной i теперь можно не только по ее имени, но и по ее адресу. Для доступа к значению переменной по ее адресу применяется специальная унарная операция *. Её операндом является обозначение адреса некоторой величины, а результатом – расположенное по данному адресу значение.
Таким образом, следующие два оператора эквивалентны (iptr – всё та же переменная-указатель, y – переменная типа int):
y = i; // присваивание переменной y значения переменной i
y = *iptr; // присваивание переменной y значения, находящегося по адресу,
// который хранится в iptr, т.е. значения переменной i
С помощью операции обращения по адресу можно не только получать, но и присваивать значения:
*iptr = 10; // запись числового значения 10 по адресу, хранящемуся в iptr
После выполнения этого оператора значение переменной i, на которую указывает указатель iptr, станет равным 10.
Указатель – это не просто адрес, а адрес величины определенного типа. Так, рассматриваемый нами указатель iptr – адрес величины типа int. Можно объявить указатели на значения и других типов, например:
unsigned short* uptr; // указатель на короткое целое число без знака
char* ср; // указатель на символ
Каждое из этих объявлений выделяет память для переменной-указателя, но каждый из этих указателей пока ни на что не указывает. До тех пор, пока указателю не будет присвоен какой-либо осмысленный адрес, его нельзя использовать в программе.
Размер переменной, объявленной как указатель, должен быть достаточным для хранения адресов и в общем случае зависит от аппаратно-операционной платформы компьютера. Так, для современных компьютерных 32-битовых платформ размер указателя 4 байта.
Тип, адресуемый указателем, определяет количество байтов памяти, рассматриваемых при выполнении операции обращения по адресу.
Дата добавления: 2015-11-10; просмотров: 534;