Задать вопрос
Mishka_Sev
@Mishka_Sev

Как на Си преобразовать тип?

Приведение осуществляется путём записи в круглых скобках типа рядом с идентификатором в выражении?

#include <stdio.h>

int main() {

    int i = 1;
    i = (float)i;  // попытка из int сделать float

    printf("%f", i); // выводим на экран float


return 0;
}


Почему не получается, что я делаю не так?
  • Вопрос задан
  • 148 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 1
wisgest
@wisgest
Не ИТ-специалист
i = (float)i;
— Так как переменная слеваi имеет тип int, то значение выражения справа (float)i будет при присваивании преобразовываться обратно в int.

printf("%f", i);
— Область памяти, начинающаяся с адреса, по которому в стек при вызове printf пемещается значение типа int переменной i (и, соответственно, занимающая sizeof (int) байт) интерпретируется как хранящая значение типа float (размером sizeof (float) байт и захватывающая дополнительно посторонний мусор из стека). Т. е. это даже не арифметическое (пусть даже с округлением) преобразование.

Должно работать:
int main() {

    int i = 1;

    printf("%f", (float)i); // выводим на экран float


return 0;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Потому что в C тип переменной объявляется один раз и не меняется. Привести к другому типу можно только значение переменной или выражения.
Ответ написан
Комментировать
CityCat4
@CityCat4 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
Все :)

Приведение типа - это не операция над значением, а операция над адресом. Оно не меняет значение, оно меняет отношение компилятора к указателю на данный обьект.
int i = 10;
int *p = &i;
char *c = (char *) p;

*c = '\xFF';


Вопрос - куда будет записано 0xFF? :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы