Инициализация указателей

При объявлении указателя надо стремиться выполнить его инициализацию, то есть присвоение начального значения. Рассмотрим некоторые способы инициализации указателей.

Присваивание указателю адреса существующего объекта:

с помощью операции получения адреса:

int a=5; // Объявление целой переменной

int *p=&a; // В указатель записывается адрес a

с помощью значения другого инициализированного указателя:

int *r=p; или int *r; r=p;

2. Присваивание пустого значения:

float *r=NULL; или float *r=0;

Арифметические операции с указателями

С указателями могут быть использованы операции инкремента (++), декремента (--), сложения (+), вычитания (-); операции сравнения, присваивания. Если к указателю применяются операции ++ или --, то указатель увеличивается или уменьшается на размер объекта, на который он указывает, что условно можно представить так:

тип *ptr;

ptr++ = содержимое_ptr+sizeof(тип)

ptr-- = содержимое_ptr-sizeof(тип)

где типом может быть любой основной тип языка C++ или тип введенный пользователем.

Операции сложения или вычитания можно применять к указателю, если вторым операндом будет целое число. Целое число складывается с указателем или вычитается из него следующим образом:

тип *ptr;

int n;

ptr+n=содержимое_ptr+n*sizeof(тип)

ptr-n =содержимое_ptr-n*sizeof(тип)

Один указатель можно вычитать из другого, если они оба указывают на один и тот же объект. Если, например, два указателя ссылаются на разные элементы массива, вычитание одного указателя из другого позволяет получить количество элементов массива, находящихся между двумя заданными. К указателям можно применять только описанные операции. Следующие операции недопустимы с указателями:

сложение двух указателей;

вычитание двух указателей на различные объекты;

сложение указателей с числом с плавающей точкой;

вычитание из указателей числа с плавающей точкой;

умножение и деление указателей.

Присваивание указателей

Можно присваивать один указатель другому. Однако эта операция имеет смысл только в том случае, если оба указателя являются указателями на объекты одного и того же типа.

Пример присваивания указателей.

#include <stdio.h>

int main()

{

int j =12525, *p1, *p2;

p1=&j;

p2=p1; // Присваивание указателей

printf(“%d\n”, *p1); // Оба оператора напечатают одно и то же

printf(“%d\n”, *p2);

return 0;

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: