C Programming - Functions - Discussion

Discussion Forum : Functions - Find Output of Program (Q.No. 15)
15.
What will be the output of the program?
#include<stdio.h>

int addmult(int ii, int jj)
{
    int kk, ll;
    kk = ii + jj;
    ll = ii * jj;
    return (kk, ll);
}

int main()
{
    int i=3, j=4, k, l;
    k = addmult(i, j);
    l = addmult(i, j);
    printf("%d, %d\n", k, l);
    return 0;
}
12, 12
7, 7
7, 12
12, 7
Answer: Option
Explanation:

Step 1: int i=3, j=4, k, l; The variables i, j, k, l are declared as an integer type and variable i, j are initialized to 3, 4 respectively.

The function addmult(i, j); accept 2 integer parameters.

Step 2: k = addmult(i, j); becomes k = addmult(3, 4)

In the function addmult(). The variable kk, ll are declared as an integer type int kk, ll;

kk = ii + jj; becomes kk = 3 + 4 Now the kk value is '7'.

ll = ii * jj; becomes ll = 3 * 4 Now the ll value is '12'.

return (kk, ll); It returns the value of variable ll only.

The value 12 is stored in variable 'k'.

Step 3: l = addmult(i, j); becomes l = addmult(3, 4)

kk = ii + jj; becomes kk = 3 + 4 Now the kk value is '7'.

ll = ii * jj; becomes ll = 3 * 4 Now the ll value is '12'.

return (kk, ll); It returns the value of variable ll only.

The value 12 is stored in variable 'l'.

Step 4: printf("%d, %d\n", k, l); It prints the value of k and l

Hence the output is "12, 12".

Discussion:
33 comments Page 1 of 4.

Potnuru said:   1 decade ago
It's because comma operator has left associativity .. so it starts from left to right .. and returns the right most value.
For example
int i = 2+(2,3,4);
printf("%d",i)

This will print '6' since '4' is the rightmost element and '2+4' i.e '6' will be printed..

I guess you all understood.

$tRiKeR said:   1 decade ago
@Potnuru.

#include<stdio.h>

int main()
{
printf("India", "BIX\n");
return 0;
}

Then what is the output of this program if your comma operator has left to right then BIX will be output but by indiabix it is Indis then who is correct ?

Krushang said:   8 years ago
@Sidharth

In return function. it takes only right most value.

So when k = addmult(i, j); is called value goes to the addmult(i,j) then kk=3+4=7 & ll=3*4=12.

Ten value return to the return(kk,ll) then it takes the only right most value so k=12 and then l=12.

Sachin said:   1 decade ago
Basically, the return statement is from right to left calling pattern because a function can't return double value at a time without using pointer. So the compiler would always take the right value as a result.

Faizan said:   6 years ago
In this comma operator is used, it work from left to right (kk, ll) but they were in bracket so right most value will be print and if there would be no bracket then left most value get printed.

Bhavana said:   6 years ago
The given explanation is correct, as there is no declaration of character variable kk so it does not print it takes only integer values.

Manjunath said:   1 decade ago
Will compiler accepts multiple values in return statement? isn't raises error there?

Boy Evil said:   1 decade ago
Function cannot return two values at a time. So this will end up as an error.

Sam said:   2 years ago
What is we return (ll,kk), then we get 12,12 as the output. Am I right?
(1)

Bhimeswar said:   1 decade ago
@Potnuru

What you said is correct, nice explanation. Keep rocking.


Post your comments here:

Your comments will be displayed after verification.