Reputation: 21
This is a sample code I have from someone and it runs giving the answers
3, 2, 15
Can someone please explain how this piece of code works and how it got to those outputs?
Code:
int a[5] = { 5, 1, 15, 20, 25 };
int i, j, m;
i = ++a[1];
j = a[1]++;
m = a[i++];
printf("%d, %d, %d", i, j, m);
_getch();
Upvotes: 1
Views: 149
Reputation: 8945
Exactly so:
**Pre- ** Increment: increment the value in the variable, then use the incremented value.
** Post- ** Increment: grab the value and use it. After grabbing the not-yet-incremented value, increment the value that's stored in the variable. Proceed, using the value as it was before.
"Operator precedence" rules mean that, for example, ++a[1]
means that the meaning of a[1]
will be resolved first, then the ++
operator will be applied to that memory-location. The value of the number-one element (which is actually the second element ...) will be incremented, and the incremented value will be returned for use by the statement.
Upvotes: 0
Reputation: 11
a[1]
refers to the second element which is 1
i=++a[1]
,a[1]
is incremented to 2
and assigned to i
a[1]
is incremented again and the value of a[1]
is incremented again to 3
m=a[i++]
, value of i
is 2
from step 1 , but it is a post increment .so, m
will remain m=a[2]
Upvotes: -1
Reputation: 134286
You should know about pre-increment (++var
) and post-increment (var++
).
Let's break down the code line by line, shall we?
i = ++a[1];
Here, a[1]
is 1
, (2nd element of array a
), is pre-incremented to 2
and that value is stored into i
.
j = a[1]++;
same, the 2
is stored into j
and then a[1]
is post-incremented to the value 3
.
m = a[i++];
a[2]
, i.e., 15
is stored into m
, and i
is post-incremented to 3
.
printf("%d, %d, %d", i, j, m);
-- Surprise!!
Upvotes: 7