
ПТСПЦУВСБ / 24. Разыменование указателей на структуры в С. Арифметические действия с указателями
..docx24. Разыменование указателей на структуры в С. Арифметические действия с указателями.
При разыменовании указателей на структуру для компактной записи можно
использовать особый оператор “->”. Если определена структура, объявлен и
инициализирован указатель на нее, то разыменовать указатель на структуру можно 2
способами:
typedef struct {
unsigned char channel;
unsigned char mode;
float amplifier;
} ADCChannel;
...
ADCChannel ADC0,*pADC0;
pADC0=&ADC0;
...
(*pADC0).mode=1; //Разыменование указателя обычным способом
pADC0->mode=1; //Разыменование с помощью специального оператора ”->”
Т.е. специализированный оператор “->” позволяет одновременно разыменовать
указатель и получить доступ к полю данных. Использование оператора “->”
предпочтительно.
Арифметические действия с указателями
Указатель можно инициализировать, присвоив ему адрес (например, как в строке 2
рис. 4.5).
Если инициализировать указатель, используя предопределенную константу “NULL”
(описанную в заголовочном файле stdlib.h) или численную константу 0, то
компилятор считает, что такой указатель никуда не указывает. 0 это единственная
численная константа, которую ANSI C разрешает явно присваивать указателю. Хотя в
большинстве случаев инициализация с помощью “NULL” и 0 идентична, рекомендуется
использовать “NULL”.
К указателям могут применяться операторы равенства и отношения (>, >=, <, <=, ==,
!=). Также к указателям может быть применен ограниченный набор арифметических
операций:
1. инкремент (++);
2. декремент (--);
3. добавление целого числа (+, +=);
4. вычитание целого числа (-, -=);
5. вычисление разности 2 указателей.
Результат арифметических действий зависит от типа указателя: инкремент и
декремент адреса осуществляется на число, равное произведению добавляемой константы
на размер типа переменной, на который ссылается указатель. Поясняющий пример
приведен на рисунке 4.6.