[ Pobierz całość w formacie PDF ]
.4.2.Operatory przypisania 914.2.Operatory przypisaniaPo obliczeniu warto ci wyra enia cz sto chcemy zachowa t warto w zmiennejdo pó niejszego u ycia.W j zyku C s u y do tego celu operator przypisania(ang.assignment) w postaci symbolu =.Aby da o si wygodnie aktualizowawarto zmiennej warto ci wyra enia, C oferuje równie zestaw tak zwanychz o onych operatorów przypisania (ang.compound assignment operators).Przypisania prosteEfektem przypisania v = e jest obliczenie wyra enia e i skopiowanie warto ciwyra enia do v.Jak wida na przyk adach poni ej, e mo e by zmienn , sta albodowolnym wyra eniem:i = 5; /* i ma teraz warto 5 */j = i; /* j ma teraz warto 5 */k = 10 * i + j; /* k ma teraz warto 55 */Je li e i v nie s warto ciami tego samego typu, w toku realizacji przypisania war-to e zostanie skonwertowana na typ v:int i;float f;i = 72.99f; /* i ma teraz warto 72 */f = 136; /* f ma teraz warto 136.0 */przypisania z konwersj 7.4Do tematu konwersji warto ci przypisywanej wrócimy nieco pó niej.W wielu innych j zykach programowania przypisanie jest instrukcj.W j zykuC przypisanie jest jednak operatorem, tak jak +.Innymi s owy, akt przypisaniajest wyra eniem posiadaj cym warto , tak samo jak akt dodawania jest wyra e-niem posiadaj cym warto (tu równ sumie operandów).Warto ci przypisaniav = e jest warto v, obliczana ju po wykonaniu przypisania.Warto ci przy-pisania i = 72.99f jest wi c nie 72,99, ale 72.Efekty uboczneZazwyczaj nie oczekuje si od operatorów, aby modyfikowa y warto ci operan-dów w matematyce operatory nie maj przecie takich w a ciwo ci.Dzia aniei + j nie modyfikuje ani i, ani j, a jedynie oblicza sum i oraz j.Wi kszo operatorów j zyka C równie nie modyfikuje operandów, ale nie-które to robi.O takich operatorach mówimy, e maj efekty uboczne, poniewa ichdzia anie nie ogranicza si tylko do jawnego wyliczenia warto ci.Pierwszym ope-ratorem, jaki poznajemy od strony efektów ubocznych, jest prosty operator przypi-sania nie tylko oblicza warto wyra enia prawego operandu, ale tak e mody-fikuje warto lewego operandu.Obliczenie warto ci wyra enia i = 0 daje warto0, a efektem ubocznym obliczenia wyra enia jest przypisanie 0 do i.92 Rozdzia 4.Wyra eniaPoniewa przypisanie jest operatorem, mo emy konstruowa a cuchowe wyra-enia z operatorami przypisania:i = j = k = 0;Operator = jest czny prawostronnie, wi c takie przypisanie jest interpretowanejako:i = (j = (k = 0));W efekcie w pierwszej kolejno ci nast pi przypisanie 0 do k, nast pnie wynikprzypisania zostanie przypisany do j, a wynik tego przypisania do i.Nale y si wystrzega nieoczekiwanych wyników w a cuchowych przypisaniach,spowodowanych konwersj typów operandów:int i;float f;f = i = 33.3f;Zmienna i otrzyma tutaj warto 33 i przez to do zmiennej f przypiszemy 33.0,a nie 33.3.Zasadniczo przypisanie w postaci v = e jest dozwolone wsz dzie tam,gdzie by aby dozwolona warto typu v.W poni szym przyk adzie wyra eniej = i kopiuje warto i do zmiennej j.Nowa warto j jest potem dodawana do1 i tak obliczona warto jest przypisywana do k:i = 1;k = 1 + (j = i);printf("%d %d %d\n", i, j, k); /* wypisuje "1 1 2" */Takie stosowanie operatora przypisania trudno jednak uzna za dobr praktykprogramistyczn.Przede wszystkim dlatego, e zagnie d one przypisania zmniej-szaj czytelno programu.Mog by równie przyczyn subtelnych b dów,o których b dzie mowa w podrozdziale 4.4.L-warto ciWi kszo operatorów j zyka C pozwala, aby w roli operandów wyst powa yzmienne, sta e albo wyra enia (równie zawieraj ce inne operatory).Operatorprzypisania jest o tyle wyj tkowy, e wymaga, aby lewy operand by tak zwanl-warto ci (ang.lvalue).L-warto reprezentuje obiekt przechowywany w pami cikomputera.Nie mo e to by sta a ani na przyk ad wynik porównania.L-warto-ciami s wszystkie zmienne.Wyra enia w rodzaju 10 albo 2 * i l-warto ciaminie s.Na razie jedyne l-warto ci, które znamy, to w a nie zmienne.W dalszychrozdzia ach powiemy sobie tak e o innych l-warto ciach.4.2.Operatory przypisania 93Z wymagania, aby lewym operandem operatora przypisania by a l-warto ,wynika, e po lewej stronie operatora przypisania nie wolno stosowa adnychwyra e :12 = i; /*** LE ***/i + j = 0; /*** LE ***/-i = j; /*** LE ***/Takie b dne przypisania s wykrywane przez kompilator próba skompilowa-nia powy szych instrukcji zaowocuje b dem kompilacji z komunikatem invalidlvalue in assignment ( niepoprawna l-warto w przypisaniu ).Przypisania z o oneW programach pisanych w j zyku C cz sto widzi si przypisania, które przy obli-czaniu warto ci przypisania bazuj na poprzedniej warto ci modyfikowanej zmien-nej.Oto przyk adowe przypisanie dodaj ce 2 do bie cej warto ci zmiennej i:i = i + 2;Takie i tym podobne instrukcje mo na w j zyku C skraca do postaci przypisaz o onych (ang.compound assignments).Mo emy wi c do analogicznej operacjiwykorzysta operator z o ony +=:i += 2; /* to samo, co i = i + 2 */Operator += dodaje do warto ci lewego operandu warto prawego operandu
[ Pobierz całość w formacie PDF ]