C Programming - Arrays - Discussion
Discussion Forum : Arrays - Find Output of Program (Q.No. 1)
1.
What will be the output of the program ?
#include<stdio.h>
int main()
{
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);
return 0;
}
Answer: Option
Explanation:
Step 1: int a[5] = {5, 1, 15, 20, 25}; The variable arr is declared as an integer array with a size of 5 and it is initialized to
a[0] = 5, a[1] = 1, a[2] = 15, a[3] = 20, a[4] = 25 .
Step 2: int i, j, m; The variable i,j,m are declared as an integer type.
Step 3: i = ++a[1]; becomes i = ++1; Hence i = 2 and a[1] = 2
Step 4: j = a[1]++; becomes j = 2++; Hence j = 2 and a[1] = 3.
Step 5: m = a[i++]; becomes m = a[2]; Hence m = 15 and i is incremented by 1(i++ means 2++ so i=3)
Step 6: printf("%d, %d, %d", i, j, m); It prints the value of the variables i, j, m
Hence the output of the program is 3, 2, 15
Discussion:
39 comments Page 4 of 4.
Selena said:
1 decade ago
In some function call,the order of passing arguments become important.
C's calling convention is from right to left.
So, first of all m is executed as it is first from right to left.
m = a[i++];
Here compiler don't know the value of i,so it would go to i.
i = ++a[1] becomes ++1.Hence i = 2 and a[1] =2.
Now, m = a[i++] becomes m = a[2++]. Hence m = a[2] = 15 and i is incremented by 1, i.e. i becomes 3.
j= a[1]++ becomes j = 2++. Hence j = 2 and a[1] = 3.
However,they will be displayed in the order they are written in the printf() function.
C's calling convention is from right to left.
So, first of all m is executed as it is first from right to left.
m = a[i++];
Here compiler don't know the value of i,so it would go to i.
i = ++a[1] becomes ++1.Hence i = 2 and a[1] =2.
Now, m = a[i++] becomes m = a[2++]. Hence m = a[2] = 15 and i is incremented by 1, i.e. i becomes 3.
j= a[1]++ becomes j = 2++. Hence j = 2 and a[1] = 3.
However,they will be displayed in the order they are written in the printf() function.
Sandy said:
1 decade ago
i=++a[1]=1+1=2 //preincrement
j=a[1]++ =1 //post increment
m=a[i++]=a[2]=15
j=a[1]++ =1 //post increment
m=a[i++]=a[2]=15
Deepak said:
1 decade ago
I don't understand this concept.
Bhavya said:
1 decade ago
please explain 4th line a[1]++ means a[1]=1 since it is post increment we will get as 1
Rupinderjit Singh said:
1 decade ago
@Bhavya:
#4 Line:i=++a[1]; //since, a[1](here 1 is an index) points to second position in array element,that is,1(here 1 is element pointed to by index),so i will assign value 1(i=1),but its pre-increment(++a[1]=++1=2) so will be i=2(as simple as it is).Now the same change will also occur in array at index position 1,that is,at a[1],so a[1]=2 also.
#5 Line:j=a[1]++; //Again here also a[1] points to second position in array element,which is now changed to 2 in #4 Line.And just because its post increment additive change will occur in next line.so j will assign value pointed to by a[1],which is 2(Again as simple as it it).
#6 Line: m=a[i++]; //Now look it as m=a[2++](from #4 Line: because i=2 there).Since, its post increment again as it was in #4 Line:.so here m is assign value pointed to by a[2], that is ,third element of an array ,that is, 15.
#7 Line: Now concentrate here,at #6 Line m=a[i++] was post incremented,which mean additive change will occur at next line,and here next line is #7(print("%d, %d, %d",i,j,m);),so here change will occur and i will be 3(2++;from previous line).
SO the out put is 3(#7 Line:), 2(#5 Line:), 15(#6 Line:)
Hope you will get it.
#4 Line:i=++a[1]; //since, a[1](here 1 is an index) points to second position in array element,that is,1(here 1 is element pointed to by index),so i will assign value 1(i=1),but its pre-increment(++a[1]=++1=2) so will be i=2(as simple as it is).Now the same change will also occur in array at index position 1,that is,at a[1],so a[1]=2 also.
#5 Line:j=a[1]++; //Again here also a[1] points to second position in array element,which is now changed to 2 in #4 Line.And just because its post increment additive change will occur in next line.so j will assign value pointed to by a[1],which is 2(Again as simple as it it).
#6 Line: m=a[i++]; //Now look it as m=a[2++](from #4 Line: because i=2 there).Since, its post increment again as it was in #4 Line:.so here m is assign value pointed to by a[2], that is ,third element of an array ,that is, 15.
#7 Line: Now concentrate here,at #6 Line m=a[i++] was post incremented,which mean additive change will occur at next line,and here next line is #7(print("%d, %d, %d",i,j,m);),so here change will occur and i will be 3(2++;from previous line).
SO the out put is 3(#7 Line:), 2(#5 Line:), 15(#6 Line:)
Hope you will get it.
Raina said:
1 decade ago
But how can value of i is come 3. It is coming 2. Please explain.
Anil said:
1 decade ago
Because i have found i=2 in step 3, and again i++ increment one time in step 5 so, i become =3
Sonu said:
1 decade ago
I think Pradyumna is correct. thanks dude..
GMK said:
1 decade ago
In step 4 j=2++ after that j=2. I can't understand. please explain.
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers