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:
40 comments Page 2 of 4.
                
                        Anita said: 
                         
                        7 years ago
                
                Please explain it to me to understand the concept of this.
                
                        Vaibhav said: 
                         
                        7 years ago
                
                M=a[i++]  if i is 2 after increment i becomes 3 then  a[3]=20.
I can't understand, why (i) not incrementing by 1 in 5th step? Please, someone, help me to get this.
                I can't understand, why (i) not incrementing by 1 in 5th step? Please, someone, help me to get this.
                     (3)
                
            
                        Yogita sable said: 
                         
                        7 years ago
                
                I don't understand please can you explain it again?
                
                        Mayank said: 
                         
                        8 years ago
                
                Hi,
++a[1] can we written as ++ *(a+1); (associativity right to left)
as *(a+1)=1;
++1; should give error.
But it works why?
                ++a[1] can we written as ++ *(a+1); (associativity right to left)
as *(a+1)=1;
++1; should give error.
But it works why?
                        Venkatesh said: 
                         
                        8 years ago
                
                int a[5]={75,94,123,566,334};
instead of that given array use this.
                instead of that given array use this.
                        Manasa said: 
                         
                        9 years ago
                
                Why i value is 3?
                
                        OMNARAYAN TIWARI said: 
                         
                        10 years ago
                
                The value of m=a[i++] not clear and its output is also confusing. It seems it's giving the output of j, i, m.
                
                        Priya said: 
                         
                        1 decade ago
                
                The order of printf function is i, j, k. Then it o/p is 2 3 15.
                
                        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.
                        Mohanapriya.N said: 
                         
                        1 decade ago
                
                Mind in post and prefix increment. Here,
i = ++a[1] --- this pre increment. i.e. the value is increased and assigned in variable (i). a[1] = 1 incremented to 1 hence we get i = 2 now.. (note carefully).
j = a[1]++ --- This is post increment. After assigning the value to the variable (j), a[1] value incremented. Already a[1] increased and assigened in "i". the increased value is 2. That is assiged to "j". (this is difference between prefix and postfix) j = 2.
m = a[i++] -- Already we have "i" value as 2. this is also post incremented increment function is not done. Just value assigned i.e. a[2].
Here a[2] is 15 hence m = 15. THis is not finished.
Post incremented done after assigning the value to the variable. Here the assign the variable to m that is "2" after that it is incremented (2+1 = 3) that value stored in "i". Hence we get the out put i = 3 now only.
                i = ++a[1] --- this pre increment. i.e. the value is increased and assigned in variable (i). a[1] = 1 incremented to 1 hence we get i = 2 now.. (note carefully).
j = a[1]++ --- This is post increment. After assigning the value to the variable (j), a[1] value incremented. Already a[1] increased and assigened in "i". the increased value is 2. That is assiged to "j". (this is difference between prefix and postfix) j = 2.
m = a[i++] -- Already we have "i" value as 2. this is also post incremented increment function is not done. Just value assigned i.e. a[2].
Here a[2] is 15 hence m = 15. THis is not finished.
Post incremented done after assigning the value to the variable. Here the assign the variable to m that is "2" after that it is incremented (2+1 = 3) that value stored in "i". Hence we get the out put i = 3 now only.
                     (1)
                
            Post your comments here:
 
            
        Quick links
                            Quantitative Aptitude
                                    
                                    Verbal (English)
                                    
                                    Reasoning
                                    
                                Programming
                                    
                                    Interview
                                    
                                     Placement Papers