Amit Singh Tomar
Amit Singh Tomar

Reputation: 8610

How can I return more than one value through function in C?

I have been asked in an interview how one can return more than one value from function. I have answered saying by using pointers we can achieve(call by reference) this in C. Then he told me he is looking for some other way of returning more than one value. I said we can return a struct object but here also he didn't seem to be impressed.

I would like to know others ways to return more than one value from a function.

I have seen this questions being asked here on SO, but could not find anything C specific.

Upvotes: 7

Views: 7903

Answers (5)

Anurag Priyadarshi
Anurag Priyadarshi

Reputation: 1109

returning a pointer to structure is the suitable answer.(Obviously, the objective of the program can decide what's the best that can be done). The interviewer might have wanted you to say 'I don't know' which would have shown your lack of confidence in the field. I think you provided good solutions, though not what he had in his mind. You could have asked him about a typical scenario where he wanted multiple values to be returned and then discuss how struct-pointer is a reasonable alternative.

Upvotes: 0

moooeeeep
moooeeeep

Reputation: 32502

That depends on what you consider a value. If a value is a piece of information for you, more values could be a struct of values. More values could be also passed via pointers or arrays, even a char* containing a list of (non-zero alphanumerical) values. If you consider a value to be a bit of information a single returned uint32_t may hold 32 values. You could even mess around with signals or sockets or pipes or files.

But for you do not even know the use case and the requirements it imposes on the solution, it's indeed a rather hard task to come up with the right solution (and you actually did come up with some proper solutions ...).

Upvotes: 1

Gouse Shaik
Gouse Shaik

Reputation: 338

Return a pointer to a structure, or pack several small datatypes into one large datatype, or use global variables.
The first is probably the cleanest way to do it, the other two might have their uses in certain situations.

If we pass the address instead of the true value of the parameters.
Then whenever we refer those parameters we do it with the address.

Upvotes: 0

Will
Will

Reputation: 75615

The tricky problem is that the interviewer has some solution they are particularly happy with in mind and they are likely grading you by whether you have the same clever trick as them or not.

You could just name a few ways such as you did, and still not fall upon their secret trick. And if you knew their secret trick, you could well not be impressed with it.

So in these situations, its to turn it from interview into conversation. Once you detect you're not moving towards their ego, you can avoid heading towards the intimidating "I don't know" "I give up" and instead try out the "so do you have any clever solution? Is there an in-house recipe for this at Xyz Inc?" etc.

Any glimpse at their obviously self-impressed solution and you are back on firm ground where you can talk about it and ask them if they have thought about various factors that come to mind and basically interview them.

Everyone loves a good listener, and getting them to talk about their tricks is a good way to get them to leave the interview throughly impressed with you! ;)

Upvotes: 27

MByD
MByD

Reputation: 137282

There are a few ways:

  1. Return value using the return statement (as you already know)
  2. Return via references.
  3. Return values via the heap.
  4. Return values via global variables.

Upvotes: 1

Related Questions