ВУЗ:
Составители:
Рубрика:
Поскольку point_count = &count, то оператор *point_count = 10 может быть
записан так:
*&count = 10;
Здесь в начале будет получен адрес переменной count( операция *), а затем по
этому адресу записано число 10, что равносильно оператору count = 10.Таким
образом, операция * уничтожает операцию &.
Таким образом, если операция ‘*’ (ее еще называют операцией операцией
снятия ссылки ) находится в левой части операции присваивания, то
выполняется операция присваивания (записи по данному адресу). И
наоборот, если операция ‘*’ находится в правой части операции присваивания,
то выполняется операция чтения по адресу. Если в первом случае данные
могут быть испорчены (опасная операция) , то во втором - нет.
Объясним теперь, почему при объявлении указателей необходимо
указывать тип данных, на который ссылается указатель. Причина в том, что
в операциях чтения и записи по адресу операции выполняются с тем числом
байт памяти, которые в данной системе программирования отводятся для
хранения данных соответствующего типа. К примеру, если указатель объявлен
на тип данных double (8 байт), то в операциях чтения и записи работа будет
осуществляться с 8 байтами. Если указатель объявлен на тип int, то c 4-
байтами пр.
Приведем пример программы #1.7, поясняющей возможность побайтного
чтения памяти.
/* программа # 1.7 */
# include < stdio.h>
void main()
{
char *point_Ch;
unsigned long l;
int i;
l = 0x89ABCDEF;
point_Ch = (char *)&l;
for ( i = 0; i < sizeof ( long) ; i++)
{
printf("%x ", point_Ch,*point_Ch & 0x00ff);
point_Ch ++;
}
8
Страницы
- « первая
- ‹ предыдущая
- …
- 6
- 7
- 8
- 9
- 10
- …
- следующая ›
- последняя »