ch-'0'
От: abrec Россия  
Дата: 14.10.09 09:39
Оценка:
Здравствуйте!
Несколько раз встречал код вида

void foo( const char* )
{
};
void foo1()
{
  char ch[3] = {'a', 'b', '\0'};
  foo( ch - '0' );//--> почему нельзя просто foo( ch );??????
};
Re: ch-'0'
От: ononim  
Дата: 14.10.09 09:41
Оценка: 2 (1)
A>void foo1()
A>{
A> char ch[3] = {'a', 'b', '\0'};
A> foo( ch — '0' );//--> почему нельзя просто foo( ch );??????
A>};
A>[/ccode]
потому что '0' и '\0' — вещи разные
ch — '0' -это этакий микро-atoi для одиночного символа.
Как много веселых ребят, и все делают велосипед...
Re: ch-'0'
От: midcyber
Дата: 14.10.09 09:42
Оценка: 2 (1)
Здравствуйте, abrec, Вы писали:

A> foo( ch — '0' );//--> почему нельзя просто foo( ch );??????


'0' == 0x30 == 48, конвертирование кода символа в число
Re: ch-'0'
От: MaxGl Украина  
Дата: 14.10.09 09:45
Оценка: 12 (2) +1
Здравствуйте, abrec, Вы писали:

Такой пример нагляднее:
void foo( const char ch )
{

};
void foo1()
{
  char ch[3] = {'1', '2', '\0'};
  foo( ch[1] - '0' );//--> почему нельзя просто foo( ch );??????
};


'0' — '0' -> 0
'1' — '0' -> 1
...
'9' — '0' -> 9
Re: ch-'0'
От: Vain Россия google.ru
Дата: 14.10.09 09:52
Оценка: 2 (1)
Здравствуйте, abrec, Вы писали:

A>Несколько раз встречал код вида

A>
A>void foo( const char* )
A>{
A>};
A>void foo1()
A>{
A>  char ch[3] = {'a', 'b', '\0'};
A>  foo( ch - '0' );//--> почему нельзя просто foo( ch );??????
A>};
A>

Видимо потому что, функция foo требует на вход уже преобразованную шестнадцатиричную (или двенадцатиричную как в примере) цифру в десятиричную.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: ch-'0'
От: vsb Казахстан  
Дата: 14.10.09 09:53
Оценка: 2 (1) +2
Здравствуйте, abrec, Вы писали:

A>Здравствуйте!

A>Несколько раз встречал код вида

A>
A>void foo( const char* )
A>{
A>};
A>void foo1()
A>{
A>  char ch[3] = {'a', 'b', '\0'};
A>  foo( ch - '0' );//--> почему нельзя просто foo( ch );??????
A>};
A>

Конкретно этот код содержит ошибку. У меня он вываливается с Segmentation Fault. Можно переписать как
foo(ch[-48]);

индексация за пределами массива. В реальности скорее всего будет передан указатель на какое то место стека. Вряд ли это то, чего хотел программист.
Re: ch-'0'
От: abrec Россия  
Дата: 14.10.09 10:00
Оценка:
Всем спасибо — вкурил
Re[2]: ch-'0'
От: Lorenzo_LAMAS  
Дата: 14.10.09 11:01
Оценка: 1 (1)
O>потому что '0' и '\0' — вещи разные
O>ch — '0' -это этакий микро-atoi для одиночного символа.

и куда же будет указывать дивный результат приведенного в примере выражения с указателем?
Of course, the code must be complete enough to compile and link.
Re[2]: ch-'0'
От: Lorenzo_LAMAS  
Дата: 14.10.09 11:02
Оценка:
M>'0' == 0x30 == 48, конвертирование кода символа в число
пример кода приведен. что там происходит?
Of course, the code must be complete enough to compile and link.
Re[2]: ch-'0'
От: Lorenzo_LAMAS  
Дата: 14.10.09 11:03
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, abrec, Вы писали:


A>>Несколько раз встречал код вида

A>>
A>>void foo( const char* )
A>>{
A>>};
A>>void foo1()
A>>{
A>>  char ch[3] = {'a', 'b', '\0'};
A>>  foo( ch - '0' );//--> почему нельзя просто foo( ch );??????
A>>};
A>>

V>Видимо потому что, функция foo требует на вход уже преобразованную шестнадцатиричную (или двенадцатиричную как в примере) цифру в десятиричную.
она требует/получает const char*/char *, судя по коду автора
Of course, the code must be complete enough to compile and link.
Re[3]: ch-'0'
От: midcyber
Дата: 14.10.09 12:57
Оценка:
Здравствуйте, Lorenzo_LAMAS, Вы писали:

M>>'0' == 0x30 == 48, конвертирование кода символа в число

L_L>пример кода приведен. что там происходит?

Да, там происходит ПЦ, меня легко подловить на сях =)
Могу лишь сказать в оправдание, что применил навык телепатии и ответил на вопрос, несмотря на код (который, видимо, записан по памяти)
Re[3]: ch-'0'
От: Vain Россия google.ru
Дата: 14.10.09 13:11
Оценка: :)
Здравствуйте, Lorenzo_LAMAS, Вы писали:

A>>>Несколько раз встречал код вида

A>>>
A>>>void foo( const char* )
A>>>{
A>>>};
A>>>void foo1()
A>>>{
A>>>  char ch[3] = {'a', 'b', '\0'};
A>>>  foo( ch - '0' );//--> почему нельзя просто foo( ch );??????
A>>>};
A>>>

V>>Видимо потому что, функция foo требует на вход уже преобразованную шестнадцатиричную (или двенадцатиричную как в примере) цифру в десятиричную.
L_L>она требует/получает const char*/char *, судя по коду автора
Ну это уже мелочи
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Re: ch-'0'
От: Кодт Россия  
Дата: 14.10.09 13:39
Оценка: +1
Здравствуйте, abrec, Вы писали:

A>
A>  char ch[3] = {'a', 'b', '\0'};
A>


К вопросу о ненужности венгерской нотации или хотя бы какой-нибудь минимальной нотации вообще.
Назвал бы массив szCheburashka (строка Чебурашка, оканчивающаяся нулём), sCheburashka / strCheburashka (строка Чебурашка), arrCheburashka (массив Чебурашка), cheburashkas (массив из чебурашек) — тут бы и задумался, лепо ли вычитать из массива букву.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[2]: ch-'0'
От: Centaur Россия  
Дата: 14.10.09 13:52
Оценка: :)
Здравствуйте, Кодт, Вы писали:

К>Назвал бы массив […] cheburashkas (массив из чебурашек) — тут бы и задумался, лепо ли вычитать из массива букву.

Разве массив чебурашек — не cheburashkae?
Re: ch-'0'
От: skeptik_  
Дата: 14.10.09 13:53
Оценка:
Здравствуйте, abrec, Вы писали:

A>Здравствуйте!

A>Несколько раз встречал код вида

A>
A>void foo( const char* )
A>{
A>};
A>void foo1()
A>{
A>  char ch[3] = {'a', 'b', '\0'};
A>  foo( ch - '0' );//--> почему нельзя просто foo( ch );??????
A>};
A>


; после функции не надо писать — интерпретируется просто как пустое указание.
Re[3]: ch-'0'
От: Кодт Россия  
Дата: 14.10.09 15:01
Оценка:
Здравствуйте, Centaur, Вы писали:

К>>Назвал бы массив […] cheburashkas (массив из чебурашек) — тут бы и задумался, лепо ли вычитать из массива букву.

C>Разве массив чебурашек — не cheburashkae?
Разве чебурашка имеет латинское происхождение? Но в любом случае — хоть даже Tscheburaschken, лишь бы отличать множество от элемента.
... << RSDN@Home 1.2.0 alpha 4 rev. 1237>>
Перекуём баги на фичи!
Re[4]: ch-'0'
От: Lorenzo_LAMAS  
Дата: 14.10.09 15:17
Оценка:
M>Могу лишь сказать в оправдание, что применил навык телепатии и ответил на вопрос, несмотря на код (который, видимо, записан по памяти)
хорошо, верю
Of course, the code must be complete enough to compile and link.
Re[2]: ch-'0'
От: Lorenzo_LAMAS  
Дата: 14.10.09 15:18
Оценка:
_>; после функции не надо писать — интерпретируется просто как пустое указание.

оно никак не интерпретируется на самом деле, т.к. нету такого в грамматике. разве что, это функция-член.
Of course, the code must be complete enough to compile and link.
Re[3]: ch-'0'
От: Lorenzo_LAMAS  
Дата: 14.10.09 15:19
Оценка:
L_L>разве что, это функция-член.
определенная в определении класса.
Of course, the code must be complete enough to compile and link.
Re: ch-'0'
От: MasterZiv СССР  
Дата: 14.10.09 18:57
Оценка: 2 (1)
abrec пишет:

> void foo1()

> {
> char ch[3] = {'a', 'b', '\0'};
> foo( ch — '0' );//--> почему нельзя просто foo( ch );??????
> };


Ты что-то с кодом перепутал. Он должен быть что-то типа

int toInt( char ch )
{
return ch — '0';
}
Posted via RSDN NNTP Server 2.1 beta
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.