Другие языки программирования и технологии

Конструкция вида ++ndigit[c - '0' ] для C - это норма?

Изучаю язык Си. Встретил конструкцию вида ++ndigit[c - '0' ] в учебнике. Я так понимаю - это приведение переменной к типу int. Вопрос: неужели нет "нормального" typecast в Си? По моему мнению значение конструкции неочевидно. Аналог из PHP - ++ndigit[(int)$c ] намного нативнее. Аналоги в Си имеются?
Iulian Chichioi
Iulian Chichioi
129
c - '0' по сути переводит символ-цифру в соответствующее число, определяемое этой цифрой.
Чувствуете кривизну формулировки?
Вот именно поэтому перевода символа-цифры в число, определяемое этой цифрой, нет.

А вот строчку перевести в число можно.
СТ
Сергей Троицкий
19 662
Лучший ответ
ИМХО это char c, там должна быть цифра, по замыслу, а коды идут так: '0','1','2',...'9' : (int)('0')=48, (int)('1')=49,...Вфражение c-'0' это перевод цифрового символа в int, те. '0'->0, '1'->1 итд.
Не знаю где ты тут приведение типов увидел, но это инкремент элемента массива ndigit с индексом c - '0'. А тайпкаст в С выглядит также как в пыхе. Вернее в пыхе он выглядит как С.
Ну и да, такой код пишут либо упоротые индусы, либо чтоб показать "гляньте какую херню можно сделать в С".
AL
A L D I K 1990
29 336
Символ '0' при приведении к целому числу дает 48, а символ '9' дает 57. Человек вводит символ '9', он преобразовывается в 57. Из числа вычитается 48, получается 9(уже не символ) . На этом принципе можно построить аналог ф-ии atoi().
Всегда ваш К. О.

з. ы. что такое typecast? по-русски, пжалста.
Андрей Близнец
Андрей Близнец
22 076
... не слышал.. . на перевод типов не похоже.. . на элимент массива.. . если это преобразователь типов то он изначально неправельный, такой хренью не может описоваться высокоуровневая функция, следовательно, это может выводить № символа, символ 0-ля 48 => в коце должно быть -48.