Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Операции, уровень приоритета которых равен 1
Операции вызова функции, индексирования и выбора. В качестве операций языка Си рассматриваются также скобки в вызове функции, квадратные скобки для индексирования массивов, точка и стрелка вправо для выбора компонентов структуры или объединения. Уровень этих операторов равен 1, все операции выполняются слева направо.
Операция вызова функции: ( ) Пример 1: fe(e1, e2,..., en); Вызов функции fe с аргументами e1, e2, ..., en. Значением этого выражения является значение, которое возвращает функция. Пример 2: x = sqrt (y);
Операция индексирования массива: [] Синтаксис: array [2] Значением выражения является третий элемент массива. Присвоение значения 26 одиннадцатому элементу массива записывается таким образом: array[10]=26; Первый элемент массива описывается выражением array[0] (более подробно о массивах описано в лекции 12).
Операция выбора компонентов структуры или объединения: . Синтаксис: struct.element Значением этого выражения является элемент element структуры struct или объединения (см. лекцию 14). Оператор: struct.element=1963; присваивает значение 1963 этому элементу. Операция выбора компонентов структуры с указателем: -> Синтаксис: my_birthday-> day, my_birthday - указатель на структуру. Оператор: my_birthday-> day=26; присваивает значение 26 структурной переменной day, на которую указывает my_birthday. Операции, уровень приоритета которых равен 2
Унарные операции. Для унарных операций требуется только один операнд; эти операции либо префиксные, либо префиксные и постфиксные. Операция sizeof имеет два варианта: префиксная операция и унарная операция.
Операция косвенной ссылки: * Это указатель на любой тип T, кроме void. Тип результата T. Использование: *pe Значением выражения является переменная, адресуемая указателем pe. Пример 1: *ptr=c; Пример 2: *fpe; Значением выражения является функция, адресуемая указателем fpe. Пример 3: fpe=*funcname; (*fpe)(arg1, arg2);
Операция получения адреса: & У этой операции тип операнда есть переменная любого типа, кроме void. Тип результата - указатель на Т. Использование: & v Значением выражения является адрес переменной v. Пример: myptr=& n;
Операция отрицания: - Тип операнда - арифметический. Тип результата: unsigned, long, double, int.
Операция логического отрицания: ! Тип операнда - арифметический или указатель. Тип результата - int. Если операнд равен 0, то результат равен 1 и наоборот. Пример: if(! good) printf(" not good" );
Операция дополнения до 1: ~ Тип операнда - интегральный. Тип результата: int, long, unsigned. Пример: opposite=~mask; Дополнение до единицы значения mask. Результат присваивается переменной opposite.
Операция увеличения: ++ Тип операнда - арифметический или указатель. Тип результата: int, unsigned, long, double, указатель. Значение операнда увеличивается, и становится новым значением операнда. Значение указателя увеличивается на величину указываемого объекта, значения других операндов увеличиваются на единицу.
Операция увеличения, постфиксная: ++ Тип операнда - арифметический или указатель. Тип результата: int, unsigned, long, double, указатель. Значение операнда увеличивается, но возвращается старое значение операнда. Значение указателя увеличивается на величину указываемого объекта, другие операнды увеличиваются на единицу. Использование: iv++ Увеличение iv на 1. Значением этого выражения является значение iv до увеличения. Пример: j=i++; Использование: pv++; Увеличение указателя pv на 1, так что он будет указывать на следующий объект того же типа. Значением этого выражения является значение pv до увеличения. Пример: *ptr++=0; Присвоить значение 0 переменной, на которую указывает ptr, затем увеличить значение указателя ptr так, чтобы он указывал на следующую переменную того же типа.
Операция уменьшения: -- Тип операнда - те же, что и для ++. Тип результата - те же, что и для ++. Использование: --iv Уменьшение iv на 1. Значением этого выражения является значение iv после уменьшения. Пример: i=--j;
Операция уменьшения (постфиксная): -- Тип операнда - те же, что и для ++ (постфиксная). Использование: iv-- Уменьшение iv на 1. Значением этого выражения является значение iv до уменьшения. Пример: j=i--;
Операция определения требуемой памяти в байтах: sizeof Тип операнда - значение любого типа или имени типа. Тип результата - unsigned. Используется как sizeof (выражение) или sizeof (имя типа). Пример: n=sizeof(arname)/sizeof(int); Число элементов в массиве целых чисел, определяемое как число байт в массиве, поделенное на число байт, занимаемых одним элементом массива.
Операции, уровень приоритета которых равен 3
Мультипликативные операции. Порядок выполнения мультипликативных операций - слева направо.
Операция умножения: * Тип операндов - арифметический. Тип результатов: int, unsigned, long, double. Использование: ae1*ae2 Произведение значений ae1*ae2. Пример: z=35*5;
Операция деления: / Тип операндов - арифметический. Тип результатов: int, unsigned, long, double. Использование: ae1/ae2 Частное от деления ae1 на ae2. Пример: i=j/7;
Операция получения остатка: % Тип операндов - интегральный. Тип результата int, unsigned, long. Знак остатка машинно-зависим. Использование: ae1%ae2 Остаток от деления по модулю. Пример: j=i%2; Если i четное число, то j равно нулю.
Операции, уровень приоритета которых равен 4
Уровень приоритета аддитивных операций равен 4. Выполняются эти операции слева направо.
Операция сложения: + Тип операндов: арифметический; один операнд указатель, другой - интегрального типа; оба операнда не могут быть указателями. Тип результата: int, unsigned, long, double, указатель. Перед сложением значение целого операнда умножается на величину элемента данных, тип которых соответствует типу указателя. Использование: ae1+ae2 Сумма значений ae1 и ae2. Пример 1: i=i+100; Первоначальное значение i увеличивает на 100. Пример 2: last=arname+arsize-1; Присваивает переменной last адрес последнего элемента массива arname.
Операция вычитания: - Тип операндов: 1. Арифметический; 2. Один операнд - указатель, другой - интегрального типа; 3. Операнды - указатели одного типа. В первом случае тип результата: int, unsigned, long, double. Во втором случае тип результата - указатель. До вычитания значение целого операнда умножается на величину элемента данных, тип которых соответствует типу указателя. В третьем случае тип результата - int. Результат - число объектов, отделенных двумя указателями.
Арифметические действия с указателями. Арифметические действия с указателями отличаются от арифметических действий с обычными целыми значениями, и определяются следующим образом. Предположим, что i является целым выражением, а указатели p и q указывают на элементы типа Т. Сложение значения i и p эквивалентно сложению числа ячеек памяти в байтах, занятых i элементами типа Т. Аналогично определяется операция вычитания. Результат вычитания двух указателей типа *Т является не разностью значений двух указателей, а числом элементов типа Т, размещенных между ячейками, ссылки на которые обеспечиваются указателями. Никакие другие арифметические действия с указателями не допускаются. Вычитание указателей имеет смысл только для указателей, ссылающихся на элементы одного и того же массива, поскольку только в этом случае разность адресов элементов массива всегда равна произведению целого значения на величину элемента. Использование: ae1-ae2 Разность значений ae1 и ae2. Пример 1: i=j-100; Использование: pe-ie Адрес переменной типа pe, меньше на ie адреса, заданного указателем pe. Пример 2: first=last-arsize+1; Использование: pe1-pe2 Число переменных типа pe в диапазоне от pe2 до pe1. Пример 3: arsize=last-first;
|
Последнее изменение этой страницы: 2017-04-13; Просмотров: 476; Нарушение авторского права страницы