Печать типов отлитых типов в C - PullRequest
0 голосов
/ 28 февраля 2019
#include <stdio.h>

int main(void) {
  int nr = 5;
  char castChar = (char)nr;
  char realChar = '5';
  printf("The value is: %d\n", castChar);
}

Если приведенный выше код скомпилирован, вывод будет:

The value is: 5

Но если приведенный ниже код скомпилирован, консоль выведет значение 53 вместо этого.Почему он не печатает так же, как когда печатается «castChar»?

#include <stdio.h>

int main(void) {
  int nr = 5;
  char castChar = (char)nr;
  char realChar = '5';
  printf("The value is: %d\n", realChar);
}

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

(char)5 и '5' - это не одно и то же.

Литерал '5' является целочисленным значением, представляющим символ 5. Его значение зависит от платформы.Предполагая ASCII представление для символов, это будет 53.

Литерал (char)5 - это целочисленное значение 5, приведенное к типу char.Это означает, что оно сохраняет значение 5 после приведения.

0 голосов
/ 28 февраля 2019

Поскольку значение castChar является целочисленным значением 5, а значение realChar является целочисленной кодировкой значения символа '5' (ASCII 53).Это не одинаковые значения.

Кастинг не имеет к этому никакого отношения.Или, точнее, приведение nr к char не даст вам символьное значение '5', оно просто присваивает целочисленное значение 5 более узкому типу.

Если вы ожидаете вывод 5, то вам нужно напечатать realChar с указателем %c, а не с указателем %d.

...