Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Переменную-указатель можно также проинициализировать, используя ранее определённую переменную-указатель. Корректным будет следующее объявление: 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; Прочитано: 216 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!