void main()
{
int a=1;
printf("%d %d %d",a,++a,a++);
}
the output is supposed to be 1 2 2....but it is 3 3 1
this is due to calling conventions of C. if anyone can
explain me how it happens?
Answers were Sorted based on User's Feedback
Answer / sumant
In C the parameters are pushed on the stack from right to
left. So
1> it will push a=1 on the stack and do a++ making a=2
2> it will porform ++a making a = 3 and push value 3
3> it will push a on the stack which is 3
so the stack will have values 1 3 3 and it will POP in
the reverse order and thus printf will display 3 3 1
Is This Answer Correct ? | 52 Yes | 11 No |
Answer / vishnu
first calculations will be done from right to left and then
prints accroding to the parameters passed.
Is This Answer Correct ? | 29 Yes | 8 No |
Answer / sathish
execution does from right to left and while printing it goes from left to right.
Is This Answer Correct ? | 18 Yes | 3 No |
Output:3 3 1 This
is because,C's calling convention is from right to left.That
is ,firstly 1 is passed through the expression a++ and then
a is incremented to 2.Then result of ++a is passed.That is,a
is incremented to 3 and then passed.Finally,latest value of
a,i.e. 3,is passed.Thus in right to left order,1 ,3, 3 get
passed.Once printf() collects them,it prints them in the
order in which we have asked it to get them printed(and not
the order in which they were passes).thus 3 3 1 gets
printed.
Is This Answer Correct ? | 8 Yes | 2 No |
Answer / hemanth
All,
output of above code is compiler depended i.e the order of
evalulation.
Is This Answer Correct ? | 8 Yes | 5 No |
Answer / keerthi
while printing the output it starts from right hand
side ..so first 'a++' value is printed then '++a' value and
last it prints 'a' value
Is This Answer Correct ? | 12 Yes | 16 No |
a way in which a pointer stores the address of a pointer which stores the value of the target value a) reference b) allocation c) multiple indirection d) none
Juxtapose the use of override with new. What is shadowing?
what are the compilation steps? ( i want inside the compiler )
What does double pointer mean in c?
explain memory layout of a C program
Why string is used in c?
What is structure padding & expalain wid example what is bit wise structure?
What is meant by 'bit masking'?
accept character from keyboard untill the user presses the enter key.If the user enters any character other than upper case(A-Z)alphabets program should stop taking any input
Explain how do you print an address?
n=7623 { temp=n/10; result=temp*10+ result; n=n/10 }
what will the following program do? void main() { int i; char a[]="String"; char *p="New Sring"; char *Temp; Temp=a; a=malloc(strlen(p) + 1); strcpy(a,p); //Line no:9// p = malloc(strlen(Temp) + 1); strcpy(p,Temp); printf("(%s, %s)",a,p); free(p); free(a); } //Line no 15// a) Swap contents of p & a and print:(New string, string) b) Generate compilation error in line number 8 c) Generate compilation error in line number 5 d) Generate compilation error in line number 7 e) Generate compilation error in line number 1