Diffrence between ++i and i++

Discussion in 'C Programming' started by Luai, Apr 12, 2004.

  1. Luai

    Luai Guest

    I made my midterm exam in the C language course.
    I lost 18 marks off 100 because I didn't relaize this killing fact:

    in (for loops) there is no difference between incrementing the loop in
    these two ways:

    for (i=0; i < 10 ; ++i)

    and

    for (i=0; i < 10 ; i++)

    ( notice the difference is between i++ and ++i )

    What are your comments on this.
    Luai, Apr 12, 2004
    #1
    1. Advertising

  2. Luai

    Ben Pfaff Guest

    (Luai) writes:

    > in (for loops) there is no difference between incrementing the loop in
    > these two ways:
    >
    > for (i=0; i < 10 ; ++i)
    >
    > and
    >
    > for (i=0; i < 10 ; i++)


    Why and how did you think they might be different?
    Ben Pfaff, Apr 12, 2004
    #2
    1. Advertising

  3. Luai

    Mac Guest

    On Sun, 11 Apr 2004 20:26:04 +0000, Luai wrote:

    > I made my midterm exam in the C language course.
    > I lost 18 marks off 100 because I didn't relaize this killing fact:
    >
    > in (for loops) there is no difference between incrementing the loop in
    > these two ways:
    >
    > for (i=0; i < 10 ; ++i)
    >
    > and
    >
    > for (i=0; i < 10 ; i++)
    >
    > ( notice the difference is between i++ and ++i )
    >
    > What are your comments on this.


    Sounds about right. Usually the meaning of ++i and i++ is one of the first
    things you learn in c. So, if you got all the way to the midterm without
    learning this, it is not a good sign. Now you know you need to study a
    little more before the final if you want a good grade (mark).

    HTH

    --Mac
    Mac, Apr 12, 2004
    #3
  4. (Luai) wrote:
    >I made my midterm exam in the C language course.
    >I lost 18 marks off 100 because I didn't relaize this killing fact:
    >
    >in (for loops) there is no difference between incrementing the loop in
    >these two ways:
    >
    >for (i=0; i < 10 ; ++i)


    which is equivalent to:

    i = 0;
    while ( i < 10 )
    {
    ++i;
    }

    >and
    >
    >for (i=0; i < 10 ; i++)


    which is equivalent to:

    i = 0;
    while ( i < 10 )
    {
    i++;
    }

    >What are your comments on this.


    Since in both cases the iteration statement is evaluated only
    for its side effect (increment i), while its value is discarded,
    there's effectively no difference.

    HTH
    Regards
    --
    Irrwahn Grausewitz ()
    welcome to clc: http://www.ungerhu.com/jxh/clc.welcome.txt
    clc faq-list : http://www.faqs.org/faqs/C-faq/faq/
    clc OT guide : http://benpfaff.org/writings/clc/off-topic.html
    Irrwahn Grausewitz, Apr 12, 2004
    #4
  5. Predecrement vs. postdecrement ... the ++ in front of something increments
    and then evaluates ... the ++ after something evaluates and then increments.

    Ed


    "Luai" <> wrote in message
    news:...
    > I made my midterm exam in the C language course.
    > I lost 18 marks off 100 because I didn't relaize this killing fact:
    >
    > in (for loops) there is no difference between incrementing the loop in
    > these two ways:
    >
    > for (i=0; i < 10 ; ++i)
    >
    > and
    >
    > for (i=0; i < 10 ; i++)
    >
    > ( notice the difference is between i++ and ++i )
    >
    > What are your comments on this.
    Edward E. Hopkins, Apr 12, 2004
    #5
  6. Luai

    Malcolm Guest

    "Luai" <> wrote in message
    >
    > I made my midterm exam in the C language course.
    > I lost 18 marks off 100 because I didn't relaize this killing fact:
    >

    A penalty of 18% for not realising that ++i and i++, in some situations,
    have exactly the same effect sounds rather harsh. However at least you know
    now.
    Malcolm, Apr 12, 2004
    #6
  7. Luai wrote:

    > I made my midterm exam in the C language course.
    > I lost 18 marks off 100 because I didn't realize this killing fact:
    >
    > in (for loops) there is no difference
    > between incrementing the loop in these two ways:
    >
    > for (i = 0; i < 10; ++i)
    >
    > and
    >
    > for (i = 0; i < 10; i++)
    >
    > (notice the difference is between i++ and ++i)
    >
    > What are your comments on this.


    There is no difference.
    C++ programmers prefer ++i only as a "good habit"
    because both the pre increment and post increment operator++
    may be overloaded for a class for very large objects
    where i++ returns a copy of the original object
    but ++i merely returns a reference
    after "incrementing" the original object.
    If you are going to write C++ programs as well as C programs,
    you probably should use ++i wherever you have a choice.
    E. Robert Tisdale, Apr 13, 2004
    #7
  8. Luai

    Ben Pfaff Guest

    Andrew Clark <> writes:

    > Ben Pfaff <> wrote in
    > news::
    >
    >> (Luai) writes:
    >>
    >>> in (for loops) there is no difference between incrementing the loop in
    >>> these two ways:
    >>>
    >>> for (i=0; i < 10 ; ++i)
    >>>
    >>> and
    >>>
    >>> for (i=0; i < 10 ; i++)

    >>
    >> Why and how did you think they might be different?

    >
    > I recall an exam where I was marked off for writing one of these (I
    > forget which one), and to correct it the instructor wrote the other one.


    You'll have to be more specific. When ++i or i++ is a full
    expression, they are equivalent. When one of them is a
    subexpression of a larger expression, they may not be
    equivalent. So if your instructor took off points in the former
    case, he (or she) was simply wrong, but in the latter case he may
    have been justified.

    By the way, here is the definition of a "full expression", from
    C99 6.8:

    4 A full expression is an expression that is not part of another
    expression or of a declarator. Each of the following is a
    full expression: an initializer; the expression in an
    expression statement; the controlling expression of a
    selection statement (if or switch); the controlling
    expression of a while or do statement; each of the
    (optional) expressions of a for statement; the (optional)
    expression in a return statement. The end of a full
    expression is a sequence point.

    --
    Go not to Usenet for counsel, for they will say both no and yes.
    Ben Pfaff, Apr 13, 2004
    #8
  9. Luai

    Andrew Clark Guest

    *** post for FREE via your newsreader at post.newsfeed.com ***

    Ben Pfaff <> wrote in
    news::

    > (Luai) writes:
    >
    >> in (for loops) there is no difference between incrementing the loop in
    >> these two ways:
    >>
    >> for (i=0; i < 10 ; ++i)
    >>
    >> and
    >>
    >> for (i=0; i < 10 ; i++)

    >
    > Why and how did you think they might be different?


    I recall an exam where I was marked off for writing one of these (I
    forget which one), and to correct it the instructor wrote the other one.

    Andrew


    -----= Posted via Newsfeed.Com, Uncensored Usenet News =-----
    http://www.newsfeed.com - The #1 Newsgroup Service in the World!
    -----== 100,000 Groups! - 19 Servers! - Unlimited Download! =-----
    Andrew Clark, Apr 13, 2004
    #9
  10. Luai

    Andrew Clark Guest

    *** post for FREE via your newsreader at post.newsfeed.com ***

    Ben Pfaff <> wrote in
    news::

    > Andrew Clark <> writes:
    >
    >> Ben Pfaff <> wrote in
    >> news::
    >>
    >>> (Luai) writes:
    >>>
    >>>> in (for loops) there is no difference between incrementing the loop
    >>>> in these two ways:
    >>>>
    >>>> for (i=0; i < 10 ; ++i)
    >>>>
    >>>> and
    >>>>
    >>>> for (i=0; i < 10 ; i++)
    >>>
    >>> Why and how did you think they might be different?

    >>
    >> I recall an exam where I was marked off for writing one of these (I
    >> forget which one), and to correct it the instructor wrote the other
    >> one.

    >
    > You'll have to be more specific. When ++i or i++ is a full
    > expression, they are equivalent. When one of them is a
    > subexpression of a larger expression, they may not be
    > equivalent. So if your instructor took off points in the former
    > case, he (or she) was simply wrong, but in the latter case he may
    > have been justified.
    >
    > By the way, here is the definition of a "full expression", from
    > C99 6.8:
    >
    > 4 A full expression is an expression that is not part of another
    > expression or of a declarator. Each of the following is a
    > full expression: an initializer; the expression in an
    > expression statement; the controlling expression of a
    > selection statement (if or switch); the controlling
    > expression of a while or do statement; each of the
    > (optional) expressions of a for statement; the (optional)
    > expression in a return statement. The end of a full
    > expression is a sequence point.
    >


    It was the former. If I can find my exam booklet I'll post the problem
    and solution, but IIRC it was more or less:

    Write an expression for iterating though an array using a for statement

    I remember the problem was such that it didn't matter which kind (pre-
    or post-) the increment operator was.

    Andrew


    -----= Posted via Newsfeed.Com, Uncensored Usenet News =-----
    http://www.newsfeed.com - The #1 Newsgroup Service in the World!
    -----== 100,000 Groups! - 19 Servers! - Unlimited Download! =-----
    Andrew Clark, Apr 13, 2004
    #10
  11. Luai

    John Bode Guest

    (Luai) wrote in message news:<>...
    > I made my midterm exam in the C language course.
    > I lost 18 marks off 100 because I didn't relaize this killing fact:
    >
    > in (for loops) there is no difference between incrementing the loop in
    > these two ways:
    >
    > for (i=0; i < 10 ; ++i)
    >
    > and
    >
    > for (i=0; i < 10 ; i++)
    >
    > ( notice the difference is between i++ and ++i )
    >
    > What are your comments on this.


    A proper understanding of the pre and post ++ and -- operators is
    vital if you're going to be programming in C. I don't know if that
    particular question should have been worth 18 points, though.

    The expression i++ evaluates to the current value of i; as a *side
    affect*, i is incremented some time before the next sequence point.

    The expression ++i evaluates to the current value of i *plus 1*; as a
    *side affect*, i is incremented sometime before the next sequence
    point.

    The -- operator works the same way, just replace "plus" with "minus"
    and "increment" with "decrement".

    In both cases above, you don't care about what the expression
    evaluates to, just the side effect (incrementing i by 1), so either
    expression works just as well. OTOH, if the autoincrement/decrement
    expression is part of a larger expression, one or the other may be
    called for. For example, given a variable i initialized to 1, the
    expressions

    j = i++ * 2 /* i == 1, j = 1 * 2 */

    and

    j = ++i * 2 /* i == 1, j = 2 * 2 */

    will assign different results for j, so whether you use pre- or
    post-increment does matter.
    John Bode, Apr 13, 2004
    #11
  12. In article <>,
    Ben Pfaff <> wrote:

    > Andrew Clark <> writes:
    >
    > > Ben Pfaff <> wrote in
    > > news::
    > >
    > >> (Luai) writes:
    > >>
    > >>> in (for loops) there is no difference between incrementing the loop in
    > >>> these two ways:
    > >>>
    > >>> for (i=0; i < 10 ; ++i)
    > >>>
    > >>> and
    > >>>
    > >>> for (i=0; i < 10 ; i++)
    > >>
    > >> Why and how did you think they might be different?

    > >
    > > I recall an exam where I was marked off for writing one of these (I
    > > forget which one), and to correct it the instructor wrote the other one.

    >
    > You'll have to be more specific. When ++i or i++ is a full
    > expression, they are equivalent. When one of them is a
    > subexpression of a larger expression, they may not be
    > equivalent. So if your instructor took off points in the former
    > case, he (or she) was simply wrong, but in the latter case he may
    > have been justified.


    Maybe the exam question was:

    "Write a full expression which increases i by one, without using a
    postincrement operator"...
    Christian Bau, Apr 13, 2004
    #12
  13. Luai

    Mabden Guest

    "E. Robert Tisdale" <> wrote in message
    news:...
    > Luai wrote:
    >
    > > I made my midterm exam in the C language course.
    > > I lost 18 marks off 100 because I didn't realize this killing fact:
    > >
    > > in (for loops) there is no difference
    > > between incrementing the loop in these two ways:
    > >
    > > for (i = 0; i < 10; ++i)
    > >
    > > and
    > >
    > > for (i = 0; i < 10; i++)
    > >
    > > (notice the difference is between i++ and ++i)
    > >
    > > What are your comments on this.

    >
    > There is no difference.
    > C++ programmers prefer ++i only as a "good habit"
    > because both the pre increment and post increment operator++
    > may be overloaded for a class for very large objects
    > where i++ returns a copy of the original object
    > but ++i merely returns a reference
    > after "incrementing" the original object.
    > If you are going to write C++ programs as well as C programs,
    > you probably should use ++i wherever you have a choice.
    >



    Didn't you mean "++C Programmers..."?

    --
    Mabden
    Mabden, May 7, 2004
    #13
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. mohammed rafi
    Replies:
    3
    Views:
    14,345
    Charles Bailey
    May 7, 2004
  2. mohammed rafi
    Replies:
    1
    Views:
    1,284
    ben cohen
    May 6, 2004
  3. ITpro
    Replies:
    2
    Views:
    2,596
    David N. Welton
    Oct 29, 2005
  4. murgan
    Replies:
    6
    Views:
    4,826
    Thad Smith
    Dec 21, 2005
  5. jigsaw
    Replies:
    4
    Views:
    443
    Gimmmo
    May 8, 2006
Loading...

Share This Page