Составители:
Рубрика:
46
то при компиляции программы будет выдано сообщение об ошибке в
строке p=&x . Эту ошибку можно исправить, преобразовав указатель
на int к типу указателя на float явным преобразованием типа: p=(int*)&x;
, но при этом теряется информация о том, на какой тип указывал исход-
ный указатель.
Над указателями можно производить арифметические операции: сло-
жение и вычитание. Арифметические действия над указателями имеют
свои особенности. Рассмотрим программу:
# include < stdio.h >
/* Пример 25 */
main
{
int *p;
int x=12;
p=&x;
printf(“%p %p”,p,++p);
}
При выполнении этой программы увидим, что при операции ++p,
значение указателя p увеличиться на 2, а не на 1. Это правильно, так
как следующее значение указателя указывает на адрес следующего це-
лого, а не на следующий адрес (целое занимает 2 байта). Таким обра-
зом, при каждой операции ++p значение указателя будет увеличиваться
на количество байт, занимаемой переменной базового типа указателя.
К указателям можно прибавлять или вычитать некоторое целое. Пусть
указатель p имеет значение 4000 и указывает на целое. Тогда в резуль-
тате выполнения оператора p=p+5; значение указателя станет равным
4010. Общая формула для вычисления значения указателя после выпол-
нения операции p=p+m; будет иметь вид:
<p>=<p>+m*<количество байт базового типа указателя>
Аналогичны правила вычитания целых констант от значения указа-
теля. Кроме того, можно вычитать один указатель из другого. Так, если
p1 и p2 – указатели на элементы одного и того же массива, то операция
p1-p2 дает такой же результат, как вычитание индексов соответствую-
щих элементов массива.
Другие арифметические операции над указателями запрещены, т. е.
нельзя складывать два указателя, умножать друг на друга и делить и т. д.
Страницы
- « первая
- ‹ предыдущая
- …
- 44
- 45
- 46
- 47
- 48
- …
- следующая ›
- последняя »