Diffrence between ++i and i++

L

Luai

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.
 
B

Ben Pfaff

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?
 
M

Mac

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
 
I

Irrwahn Grausewitz

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
 
E

Edward E. Hopkins

Predecrement vs. postdecrement ... the ++ in front of something increments
and then evaluates ... the ++ after something evaluates and then increments.

Ed
 
M

Malcolm

Luai said:
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.
 
E

E. Robert Tisdale

Luai said:
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.
 
B

Ben Pfaff

Andrew Clark said:
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.
 
A

Andrew Clark

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
 
A

Andrew Clark

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
 
J

John Bode

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.
 
C

Christian Bau

Ben Pfaff said:
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"...
 
M

Mabden

E. Robert Tisdale said:
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..."?
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,576
Members
45,054
Latest member
LucyCarper

Latest Threads

Top