|
Oператор за присвояване
Това е един от най-важните оператори на езика. Вече многократно го използвахме, а също в глава 2 описахме неговите синтаксис и семантика. В тази глава ще го разгледаме по-подробно. Ще напомним неговите синтаксис и семантика. Синтаксис <променлива> = <израз>; където - <променлива> е идентификатор, дефиниран вече като променлива, - <израз> е израз от тип, съвместим с типа на <променлива>. Семантика Намира се стойността на <израз>. Ако тя е от тип, различен от типа на <променлива>, конвертира се, ако е възможно, до него и се записва в именуваната с <променлива> памет. Забележки: • Ако <променлива> е от тип bool, <израз> може да бъде от тип bool или от който и да е числов тип. • Ако <променлива> е от тип double, всички числови типове, а също типът bool, могат да са типове на <израз>. • Ако <променлива> е от тип float, типовете float, short, unsiged short и bool, могат да са типове на <израз>. Ако <израз> е от тип int, unsigned int или double, присвояването може да се извърши със загуба на точност. Компилаторът предупреждава за това. • Ако <променлива> е от тип int, типовете int, long int, short int и bool, могат да са типове на <израз>. В този случай ако <израз> е от тип double или float, дробната част на стойността на <израз> ще бъде отрязана и ако полученото цяло е извън множеството от стойности на типа int, ще се получи случаен резултат. Компилаторът издава предупреждение за това. • Ако <променлива> е от тип short int, типовете short int и bool, могат да са типове на <израз>. В противен случай се извършват преобразувания, които водят до загуба на точност или даже до случайни резултати. Много компилатори не предупреждават за това. Ще отбележим, че в рамките на дефиницията на една функция не са възможни две дефиниции на една и съща променлива, но на една и съща променлива може да й бъдат присвоявани многократно различни стойности. Пример: Не са допустими CODE
a = a + 1; той съкратено се означава с a++; Въведено е също и съкращението a-- на оператора a = a-1; В същност ++ и -- са реализирани като постфиксни унарни оператори увеличаващи съответно намаляващи аргумента си с 1. Приоритетът им е един и същ с този на унарните оператори +, - и !. Забележка: От оператора ++, за добавяне на 1, идва името на езика C++ - вариант на езика C, към който са добавени много подобрения и нови черти. Допълнения: 1. Операторът за присвояване <променлива> = <израз>; съдържа оператора =, реализиран като дясноасоциативен инфиксен аритметично-логически оператор с приоритет по-нисък от този на дизюнкцията ||. Това позволява на <променлива> = <израз>; да се гледа като на израз от тип – типа на <променлива> и стойност – стойността на <израз>, ако е <израз> от типа на <променлива> или стойността на <израз>, преобразувана до типа на <променлива>, ако <променлива> и <израз> не са от един и същ тип. Пример: Програмата CODE
2. Ако е в сила дефиницията: CODE
CODE
Някои компилатори издават предупреждение при тази употреба на оператора =. Затова не препоръчваме да се използва = като аритметичен оператор.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||









