3.2.14. Operatorul virgula

2019/02/01 in Programare in C

Operatorul virgula leaga doua expresii in una singura conform formatului de mai jos.

exp1,exp2

Operatorul virgula are cea mai mica prioritate dintre toti operatorii limbajului C. Prioritatea lui este imediat mai mica decat a operatorilor de atribuire.

Constructia de mai sus este o expresie. Valoarea si tipul acestei expresii coincide cu valoarea si tipul ultimei expresii, deci in cazul de fata cu a lui exp2.

O constructie de forma:

(exp1,exp2),exp3

este corecta si ea este o noua expresie. Intr-adevar, exp1, exp2 fiind expresii, (exp1,exp2) este un operand, deci tot o expresie, asa ca dupa ea poate fi scrisa o virgula urmata de o alta expresie. Deoarece operatorul virgula are cea mai mica prioritate, rezulta ca parantezele pot fi omise, deci expresia de mai sus se poate scrie si:

exp1,exp2,exp3

In general, o expresie de forma:

exp1,exp2,...,expn

unde exp1, exp2,...,expn sunt expresii, este o expresie a carei valoare si tip coincid cu valoarea si tipul lui expn.

Intr-o astfel de constructie, expresiile se evalueaza pe rand, de la stanga la dreapta.

Operatorul virgula se utilizeaza in situatii in care intr-un anumit punct in program in care este legal sa folosim o expresie este necesar sa se realizeze un calcul complex exprimat prin mai multe expresii.

Exercitiu:

3.23. Sa se scrie un program care citeste doi intregi si afiseaza maximul dintre valorile lor absolute. (Acest exercitiu a fost rezolvat si cu Programul 046)

#include <stdio.h>

main()
{
    int a, b, c, d;

    scanf("%d %d", &a, &b);
    printf("a=%d\tb=%d\tmax(abs(a),abs(b))=%d\n", a,b,((c=a<0?-a:a),(d=b<0?-b:b),(c>d))?c:d);
}

Observatie: Expresia (c=a<0?-a:a),(d=b<0?-b:b),(c>d) se compune din trei expresii care se evalueaza de la stanga la dreapta.

Prima atribuire a lui c este valoarea absoluta a lui a, a doua atribuire a lui d este valoarea absoluta a lui b, iar a treia testeaza relatia c>d. Valoarea intregii expresii coincide cu 1 daca c>d si cu 0 in caz contrar.

3.2.15. Alti operatori ai limbajului C