Печать char как целое число - PullRequest
0 голосов
/ 30 января 2019
int main(){
    char a = 65;
    a=a+5;
    printf("%d\n",a);
}

Я думаю, что я, по крайней мере, получаю предупреждение о том, что я пытаюсь напечатать %d, но переменная char

Почему нет проблем печатать таким образом?

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Я думаю, что по крайней мере я получаю предупреждение о том, что я пытаюсь напечатать %d, но переменная char

"нет проблем", потому что "%d" ожидалось, что int и a были преобразованы в int при передаче в printf(). @ Флюгер


Повышение аргументов по умолчанию

Поскольку a передается printf(const char *, ...) в качестве аргумента ...:

Нотация многоточия в деклараторе прототипа функции приводит к прекращению преобразования типа аргумента после последнего объявленного параметра.Повышение аргументов по умолчанию выполняется на конечных аргументах.C11dr §6.5.2.2 7

По умолчанию повышение аргумента из char преобразует его в int 1 .


1 или unsigned при CHAR_MAX > INT_MAX.
(Пример: исключительные платформы, где char, int имеют одинаковую битовую ширину и знак.)

0 голосов
/ 30 января 2019

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

Везде, где int или unsigned int может использоваться вВыражение, включая аргументы функции, вы можете использовать вместо char.

Если бы мы разрабатывали язык заново, мы могли бы отличить char -асимвол от char -кас-целых и требовать явногопреобразования для преобразования между ними.Однако язык такой, какой он есть.

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