Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Инициализация и присваивание указателей



Переменную-указатель можно также проинициализировать, используя ранее определённую переменную-указатель. Корректным будет следующее объявление: int* q=p; что равносильно int *q; q=p; ( а не *q=p;). После этого q и p будут содержать один и тот же адрес, адрес ячейки t. Поэтому *p и *q —это одно и то же целочисленное значение t. Заметим, что присваивания *q=p; *p=q; q=*p; p=*q; p=t; q=t; некорректны. Объяснить, почему.

Нельзя переменную-указатель проинициализировать константой или определённым ранее значением переменной.

a) int *p=1000; /* Ошибка!!! */

b) int *p; p=1000; /* Ошибка!!! */

c) int *p, k; cin>>k; p=k; /* Ошибка!!!. */

Это связано с тем, что система сама должна “найти” свободную ячейку и её адрес присвоить нашей переменной. Наша “помощь” будет отвергнута. Переменную-указатель нельзя также вводить. Поэтому cin>>p; недопустимо.

Не будет ошибкой, если во время объявления указателя мы его не проинициализируем. Но до его первого использования надо не забыть это сделать, например, с помощью присваивания: float f=1.1, *p1, *p2; … p1=&f; … p2=p1;

cout<<(*p1)<<” “<<(*p2); В результате будет выведено дважды одно и то же число 1.1, если, конечно, значение f, или, что то же самое, * p1 или * p2 не меняли.

Присваивание указателей допустимо, если оба указателя содержат адрес ячеек с данными одного и того же типа. Поэтому следующий фрагмент

double x=12.34, y; int *w; w=&x; y=*w; printf (“%f”, y); // Ошибка!!!

не приведёт к желаемому результату 12.34. Во время компиляции w=&x; появится сообщение об ошибке, связанное с несоответствием типов. Но если int* w; заменить на double * w, то программа выведет 12.34.





Дата публикования: 2015-02-18; Прочитано: 215 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...