К аддитивным операциям относятся сложение (+) и вычитание (-). Операнды могут быть целого или плавающего типов. В некоторых случаях над операндами аддитивных операций выполняются общие арифметические преобразования. Однако преобразования, выполняемые при аддитивных операциях, не обеспечивают обработку ситуаций переполнения и потери значимости. Информация теряется, если результат аддитивной операции не может быть представлен типом операндов после преобразования. При этом сообщение об ошибке не выдается.
Пример 1
int i=30000, j=30000, k;
k=i+j;
В результате сложения k получит значение равное -5536.
Результатом выполнения операции сложения является сумма двух операндов. Операнды могут быть целого или плавающего типа или один операнд может быть указателем, а второй — целой величиной. Когда целая величина складывается с указателем, то целая величина преобразуется путем умножения ее на размер памяти, занимаемой величиной, адресуемой указателем. Когда преобразованная целая величина складывается с величиной указателя, то результатом является указатель, адресующий ячейку памяти, расположенную на целую величину дальше от исходного адреса. Новое значение указателя адресует тот же самый тип данных, что и исходный указатель.
Операция вычитания (-) вычитает второй операнд из первого. Возможна следующая комбинация операндов:
1. Оба операнда целого или плавающего типа.
2. Оба операнда явлѓ±тся указателями на один и тот же тип.
3. Первый операнд является указателем, а второй — целым.
Отметим, что операции сложения и вычитания над адресами в единицах, отличных от длины типа, могут привести к непредсказуемым результатам.
Пример 2
k=i+j;
double d[10],* u;
int i;
u = d+2;           /*  u  указывает на третий элемент массива */
i = u-d;           /*  i  принимает значение равное 2         */