3.2.9. Operatorul de fortare a tipului sau de conversie explicita (expresie cast)

2019/01/27 in Programare in C

Adesea dorim sa specificam conversia valorii unui operand spre un tip dat. Acest lucru este posibil folosind o constructie de forma:

(tip)operand

printr-o astfel de constructie, valoarea operandului se converteste spre tipul indicat in paranteze.

In constructia de mai sus se considera ca (tip) este un operator unar. Il vom numi operator de fortare a tipului sau de conversie explicita.

Constructia de mai sus o vom numi expresie cast.

Exemplu:

Presupunem ca functia f are un parametru de tip double. Fie declaratia:

int n;

Atunci, pentru a apela f cu parametrul n este necesar ca, in prealabil, n sa se converteasca la tipul double. Acest lucru se poate realiza printr-o atribuire:

double x;
...
f(x=n);

Un alt mod mai simplu de conversie a parametrului intreg spre tipul double este utilizarea expresiei cast:

f((double)n);

Operatorul (tip) fiind unar, are aceeasi prioritate ca si ceilalti operatori unari ai limbajului C.

Exercitii:

3.17. Sa se scrie un program care citeste un intreg si afiseaza radacina patrata din numarul respectiv.

#include <stdio.h>
#include <math.h>

main()
{
    long n;

    scanf("%ld\n", &n);
    printf("n = %ld\tsqrt(n) = %g\n", n, sqrt((double)n));
}

Observatie:

In acest program s-a utilizat functia sqrt pentru extragerea radacinii patrate. Ea are prototipul:

double sqrt(double);

definit in fisierul math.h.

3.18. Sa se scrie un program care citeste pe n de tip intreg si afiseaza valoarea expresiei n/(n+1) cu 15 zecimale.

#include <stdio.h>

main()
{
    long n;

    scanf("%ld\n", &n);
    printf("n = %ld\t n/(n+1) = %.15g\n", n, (double)n/(n+1));
}

Observatie:

Expresia n(n+1) realizeaza impartirea intreaga a lui n la n+1. Pentru a obtine catul impartirii cu 15 zecimale este necesar sa se efectueze impartirea neintreaga. In acest scop s-a convertit operandul n spre tipul double. In felul acesta, conform regulii conversiilor implicite, se converteste spre double si cel de-al doilea operand si apoi se face impartirea celor doi operanzi flotanti.

3.2.10. Operatorul dimensiune (sizeof)