это си, звездочка не нужна, результат ++ - l-value. это преобразование выражений ++, -- и op= в выражения без этих трюков (например, в такие как разрешены в паскале... ну кроме операции запятая, без нее такое сделать нельзя). последние сутки писал реализацию такого автоматического преобразования, вот и вылилось чуток в ЖЖ). скобки не балансированы из-за проклятого copy-paste).
а это извращение какое-то). первая буква вроде T, а остальное... TEST? )
Результат ++ - не L-value, а R-value. Если i типа int, (i++)++ не компилируется (gcc: error: invalid lvalue in increment). Не компилируется также и &(i++) - взятие адреса от этого value (error: invalid lvalue in unary `&'), но компилируется 1&(i++) - логическое И.
В "извращении" первая буква P - следи внимательней (сделай картинку или несколько).
Comments 9
Вот тебе поинтереснее (чур не гуглить и не запускать):
#include
char *c[]=
{
"ENTER",
"NEW",
"POINT",
"FIRST"
};
char **cp[]={c+3,c+2,c+1,c};
char ***cpp=cp;
int main(void)
{
printf("%s", **++cpp);
printf("%s ", *--*++cpp+3);
printf("%s", *cpp[-2]+3);
printf("%s\n", cpp[-1][-1]+1);
return 0;
}
Reply
а это извращение какое-то). первая буква вроде T, а остальное... TEST? )
Reply
Если i типа int, (i++)++ не компилируется (gcc: error: invalid lvalue in increment).
Не компилируется также и &(i++) - взятие адреса от этого value (error: invalid lvalue in unary `&'), но компилируется 1&(i++) - логическое И.
В "извращении" первая буква P - следи внимательней (сделай картинку или несколько).
Reply
Зато вот так можно:
int i = 1;
i += i += 1;
Ответ: POINTER STEW
Признаюсь, сделал еще одну ошибку на ER). а задача-то простая конечно. вобщем, на пенсию пора... или там идти на C# писать))
Reply
Reply
Leave a comment