Тоесть я так понимаю:
c++ - сначала возвращает текущее значение, а потом присваевает увеличиное значение с на 1.
++с - увеличивает значение на 1, присваевает его с и возвращает увеличеное значение.
Пример действительно фиговый :) Нет никакой разницы, как увеличивать счетчик в for-e. Разница, как уже было сказано, в том, что ++с сначала увеличивается, а потом возвращает значение. с++ наоборот. Как легко понять, реализация (обычно) с++ несколько накладнее, ведь нуюно сначала сохранить старое значение, потом увеличить переменную, а потом как-то использовать сохраненное значение.
Ikonta_521 (*) (2003-03-20 09:07:00.838342):
>> Обе увеличивают с на 1 но результат с++ равен с, а ++с равен (с+1).
>
> Неправильно... :(
Как раз правильно! ( в отличие от приведенного тобой примера, BTW - впрочем,
про пример уже проехали).
В Це (в отличие от Паскаля, например) любая операция возвращает значение.
c++ - операция, и ++с - операция. Операция c++ возвращает прежнее значение,
содержащееся в c (т.е., "результат с++ равен с") и имеет "побочный эффект" -
инкремент c на 1. Операция ++c возвращает новое значение c и имеет тот же
самый "побочный эффект" - инкремент c на 1.
> ...до или после прибавления производится обработка значения переменной.
Несколько корявый способ выразить то же самое, с чем ты не соглашаешься.
А какая "обрабатка" производится в приведенном тобой примере?
А, например, в операторе с++; ?
2NetKnight:
Ну, вроде, ты все понял. На всякий случай, вот тебе "улучшенный"
пример ananas (*) (2003-03-20 13:20:40.843344):
#include <stdio.h>
int main(void)
{
int c,b;
b=c=1;
printf("c=%d, c++=%d\n",b,c++);
c=b;
printf("c=%d, ++c=%d\n",b,++c);
return 0;
}
Обрати внимание: в отличие от Фортрана, например, в Це любая операция
возвращает значение. Ну, не совсем точно выразился: операция всегда и
везде возвращает значение, на то она и операция, но в Фортране,
например,
a=b
- ОПЕРАТОР присваивания, а в Це - ОПЕРАЦИЯ. Оператор получится, когда
ты добавишь точку с запятой в конец.
Например , ты можешь написАть такой оператор:
a=(b=(c+=d++))+1;
Обрати внимание на семантическое отличие точки с запятой в Це от
Паскаля: в последнем точка с запятой используется для РАЗДЕЛЕНИЯ
операторов, а в Це точка с запятой используется для ПОСТРОЕНИЯ
оператора: оператор получается добавлением точки с запятой к операции.
Например:
a=1
-операция, возвращает 1, "побочный эффект" - присваивает a значение 1.
b=(a=1)+1
-операция, возвращает 2, "побочный эффект" - присваивает a значение 1
и b - значение 2.
b=(a=1)+1;
-оператор, ничего не возвращает, но присваивает a значение 1,
а b - значение 2.
> Как легко понять, реализация (обычно) с++ несколько накладнее, ведь
> нуюно сначала сохранить старое значение, потом увеличить
> переменную, а потом как-то использовать сохраненное значение.
Бред. Зачем сохранять старое значение? Оно сразу используется, а потом уже увеличивается. Может так нагляднее:
И что? Значение, возвращаемое c++/++c используется только один раз и сохранять его не имеет смысла. И никаких функций cpp/ppc не вызывается :). Ну если и так не понятно:
Эй люди чего вы так разгорячились это такой прикол на собиседованиях
спрашивают...
Одни начинают как вы типа код гнать примеры приводит а другие просто
отвечают: с++ это язык программирования а ++с это никримент с
Проверка на чувство юмора типа но человек или програмер совсем
отмороженный...