C программирование - неожиданный вывод - PullRequest
0 голосов
/ 02 сентября 2018

Я не могу понять, как работает следующий код:

#include<stdio.h>

int main() {

 int i = 100;
 int *a = &i;
 float *f = (float *)a;

 (*f)++;

 printf("%d", *a); //getting some garbage value

}

«f» указывает на ту же ячейку памяти, что и «a». Таким образом, (*f)++ должен, в свою очередь, увеличить значение i до 101. Где я иду не так?

1 Ответ

0 голосов
/ 02 сентября 2018

Плавающие и целые числа хранятся с различными двоичными представлениями. Когда вы преобразуете float в int или наоборот, компилятор позаботится об этом за вас. Но в вашем случае вы преобразуете int* в float*, поэтому вы модифицируете число с плавающей точкой, которое имеет неправильное значение, поскольку двоичное представление не было преобразовано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...