Типа я не понял... Что делает функция P() и как она описана в оригинале? Никакого приведения в типу аргумента - как же оно откомпилируется? А если откомпилируется, то не факт, что будет правильно работать.
Насчет приведения типов... это я понимаю "_"+(*u++/8)%2 <- вот этот кусок?
Ну тут всё просто, C с памятью работает прямее некуда, так что любая ссылка (char*, int*, MyClass*...) это всего навсего 32-битное целое число (на 64-битных процессорах оно уже 64-битное). u у нас тоже ссылка, хотя ничто не мещает ей быть переменной целого или вещественного типа (не забываем, что С хоть и жаден до типов данных, но double в int или ссылку в int для него перевести не проблема, а вот в обратную сторону это надо ручками, да и к тому же от порядка операндов зависит)
Так чему же равно "_"+(*u++/8)%2?
Вспоминаем приоритеты операторов...
Итак, вычисляется *u - это некоторое число расположенное в ячейке с адресом u. Сколько в нём байт - зависит от типа u (char - 1 байт, int - 4 байта). После этого u увеличивается на 1 - сдвигается на следующие значение. После этого то число, которое мы получили при *u делится на 8? а потом считаем остаток при делении на 2.
Пример.
допустим
char u[]="hello";
Что имеем?
*u='h' или *u=108; что собственно одно и тоже.
потом u++ . u="ello";
*u++/8=13; 108/8=13.5, C производит округление и получаем 13
13%2=1
итак, правый операнд в "_"+(*u++/8)%2 принимает значения 0 или 1. А само выражение или равняется "_" или на еденицу больше. А что такое "_"? это 32-битное целое число, равное номеру ячейки памяти, где хранится "_"
Так что всё это компилится еще как.
----------------sample.c---------------------
int P(char*n)
{
return n[0];
}
void main()
{
char str[]="hello";
char* u=str;
int R=10,e=10,C=10;
Acer X960
[Print]
Гость