Применение указателей в выражениях
Как известно, приоритет операций имеет большое значение при вычислении выражений. Унарные операции & и * имеют более высокий приоритет, чем арифметические, и поэтому выполняются раньше их. Унарные операции * (разадресация), ++, -- имеют одинаковый приоритет и выполняются слева направо. Следующий пример иллюстрирует взаимодействие унарных адресных операций при вычислении выражений. Напомним, что операция присваивания – это, по сути, пересылка результата вычисления в переменную, стоящую слева от знака равенство.
Пример 9 int x[4]={0, 2, 4, 6}, *p, y; p=&x[0]; y=*p; //1 y=*p++; //2 y=++*p; //3 y=*++p; //4 y=(*p)++; //5 y=++(*p); //6
Рис. 3 Обращение к массиву с применением указателей
В данном примере к массиву, заданному при его определении, происходит обращение с помощью указателя р. Пример хорошо показывает двойственную природу указателя – с одной стороны, указатель имеет свое собственное значение – адрес переменной, с другой стороны, он дает возможность обращения к этой самой переменной. Поэтому, манипулируя указателем, мы имеем возможность, с одной стороны, «перебирать» элементы массива, изменяя значение самого указателя (адреса, записанного в него), с другой – обращаться к элементам этого массива. Каждая строка этого примера содержит действия как над элементами массива, так и над указателем, последовательность выполнения которых иллюстрируется текстом и рис. 3 Строка 1 Обращение к нулевому элементу (операция разыменования). Пересылка нулевого элемента массива в у. Строка 2. Обращение к нулевому элементу (операция разыменования). Пересылка элемента массива х[0] в у. Инкремент указателя (перемещение на следующий элемент с индексом 1). Строка 3. Инкремент текущего элемента массива (1-го элемента). Пересылка элемента массива x[1] в у. Строка 4. Инкремент указателя (перемещение на следующий элемент). Пересылка элемента массива x[2] в у. Строка 5. Пересылка элемента массива x[2] в у. Инкремент элемента массива. Строка 6. Инкремент элемента массива. Пересылка элемента массива x[2] в у.
|