Я изучаю C на данный момент и решил немного поэкспериментировать с указателями. Я скомпилировать и выполнить следующий код:C: странное поведение printf
int main()
{
float a = 8;
int *b, *c;
b = &a;
c = &b;
printf("%d\n%d\n%d\n", a, b, c);
exit(0);
}
Выполнение кода дает:
-562800092
-562800104
0
Теперь я знаю, что я пытаюсь напечатать поплавок в виде целого числа. Когда я печатаю его с помощью float, я получаю желаемый результат (поплавок и 2 адреса памяти).
Если я печатаю его (неправильно) как целое число, он, кажется, печатает адрес памяти как. b печатается как другой адрес памяти (что является правильным, так как это адрес), а c по какой-то причине 0. Похоже, что printf фактически меняет некоторые данные.
Может ли кто-нибудь объяснить, что здесь происходит?
Я использую GCC как компилятор кстати.
Если вы напечатаете данные «неправильно», это будет неверно. Конец истории! –
Сколько предупреждений было там? и сколько вы проигнорировали? –