What is the difference between array[i]++ (increment outside brackets) and array[i++] (increment inside brackets), where the array is an int array[10]?
- 4,555
- 31
- 31
- 45
- 2,150
- 8
- 39
- 73
7 Answers
int a[] = {1, 2, 3, 4, 5};
int i = 1; // Second index number of the array a[]
a[i]++;
printf("%d %d\n", i, a[i]);
a[i++];
printf("%d %d\n", i, a[i]);
Output
1 3
2 3
a[i]++ increments the element at index i, it doesn't increment i. And a[i++] increments i, not the element at index i.
-
2What's missing from this answer is what `a[i]++` and `a[i++]` evaluate to. – David Heffernan Sep 29 '11 at 09:56
-
It is a little bit confusing because the array *values* are in about the same range as the array *indexes*. Can you offset the values (say, by 60), so there isn't any overlap between indexes and values? – Peter Mortensen Jan 13 '20 at 03:38
-
2The example output is misleading, since the access of `a[i++]` in the second statement actually returns the value at index `1`, which has been inceremented to `3` before. Be aware that `x = a[i++];` is equivalent to the statement sequence `x = a[i]; i++;` So i is used as index *before* it is incremented. – Richard Neumann Jan 24 '21 at 18:17
array[i]++increments the value ofarray[i]. The expression evaluates toarray[i]before it has been incremented.array[i++]increments the value ofi. The expression evaluates toarray[i], beforeihas been incremented.
An illustration.
Suppose that array contains three integers, 0, 1, 2, and that i is equal to 1.
array[i]++changesarray[1]to 2, evaluates to 1 and leavesiequal to 1.array[i++]does not modifyarray, evaluates to 1 and changesito 2.
A suffix operators, which you are using here, evaluates to the value of the expression before it is incremented.
- 601,492
- 42
- 1,072
- 1,490
array[i]++ means ( *(array+i) )++. --> Increments the Value.
array[i++] means *( array + (i++) ). --> Increments the Index.
- 22,572
- 7
- 65
- 91
Here the Array[i]++ increments the value of the element array[i],
but array[i++] increments the i value which effects or changes the indication of the array element (i.e. it indicates the next element of an array after array[i]).
- 2,749
- 3
- 21
- 42
- 340
- 1
- 2
- 15
Let's say we have this example, array[i++] = x[m++]. This means that first set array[i] = x[m] then increase the indexes like i + 1, m + 1.
- 19
- 3
Here array[i++] increments the index number.
On the contrary, array[i]++ increments the data value of i index.
Code Snippet:
#include <iostream>
using namespace std;
int main()
{
int array[] = {5, 2, 9, 7, 15};
int i = 0;
array[i]++;
printf("%d %d\n", i, array[i]);
array[i]++;
printf("%d %d\n", i, array[i]);
array[i++];
printf("%d %d\n", i, array[i]);
array[i++];
printf("%d %d\n", i, array[i]);
return 0;
}
- 3,588
- 2
- 39
- 40
#include<iostream>
using namespace std;
int main()
{
int arr[]={1,2,37,40,5,7};
int i = 3;
arr[i]++;
cout<<i<<" "<<arr[i]<<endl;
arr[i++];
cout<<i<<" "<<arr[i]<<endl;
return 0;
}
Output:
3 41
4 5
In this example i = 3, so arr[3] = 40. It then increases the value from 40 to 41 .So arr[i]++ increments the value of this particular index and a[i++] first increments the index and then gives the value for this index.