C++ Programming - References - Discussion

Discussion Forum : References - General Questions (Q.No. 12)
12.
Which of the following statements is correct?
  1. We can return a global variable by reference.
  2. We cannot return a local variable by reference.
Only 1 is correct.
Only 2 is correct.
Both 1 and 2 are correct.
Both 1 and 2 are incorrect.
Answer: Option
Explanation:
No answer description is available. Let's discuss.
Discussion:
23 comments Page 2 of 3.

Varunrao.rao@gmail.com said:   9 years ago
#include<iostream.h>
int i=9;
int& myfunc()
{
return i;
}
int main() {
int g=myfunc();
cout<<g<<endl;
return 0;
}

Here, we can return global variable by reference.

Ajay Kuril said:   9 years ago
Here local value is returned by reference so global and local both can be returned by reference.

int main()
{
float grade();
float gpa = grade();
cout<<gpa;
return 0;
}

float grade()
{
float gpa = 3.5;
float &a=gpa;
return a;
}

The output is 3.5.

Meet said:   9 years ago
Correct option is D:

It is perfectly valid & fine to return a reference to the global variable.

#include <iostream>
int s=9;
int& foo()
{
return s;
}
int main()
{
std::cout<<"value of s = "<<s<<'\n';
foo()=3;
std::cout<<"value of s = "<<s<<'\n';
}

It is syntactically valid to return a reference to a local variable but it doesn't make any sense to return a reference a local variable. Because the local variable is destroyed when execution of function finishes. So the reference to such variable is invalid & results in undefined behavior in C++.

Consider following program:

#include <iostream>
int& foo()
{
int s(9);
return s;
}
int main()
{
std::cout<<foo()<<'\n';
}

Compiler shows only warning when compiling above program.
[Warning] reference to local variable 's' returned [-Wreturn-local-addr]

Will said:   8 years ago
It would be nice if s/o with access to modify the answer would correct it, because you can return a reference to a global variable and can not return a reference to a local variable.

Sergey D said:   8 years ago
Correct answer is C: Both 1 and 2 are correct.

Test must be corrected.

Sai kiran said:   8 years ago
We can return a global variable by reference and also we can return local variable by reference (it is not a language error), the user/ programmer has to take care not to return local variable by reference as it might not be there on the stack when he later uses it.

So, if we simply take what is allowed, at least by the compiler, the answer would be A.

Okan said:   8 years ago
int myGlobal = 1978;
int& returnGlobal()
{
return myGlobal;
}
int &myr = returnGlobal();
cout << "Global reference value=" << myr << endl;

It prints 1978 on the screen.
So returning global reference is possible.

Jerry said:   7 years ago
Only A should be correct.

Otherwise they should specify what they mean by "can't", because you can actually return a local variable by reference, it's a potential bug, but you "can" do it you won't get any crash or compilation error by doing it.

And returning a reference to a global variable is totally legal.
(1)

Bhan ka loda said:   7 years ago
Answer is [A].

Well we can return both global and local variables by reference.

Stuvi said:   7 years ago
The Correct answer is C, both 1 and 2 are correct.

@ALL.

Note that 2 says "We cannot return a local variable by reference. ", which is true we _can't_ return a reference to a local variable.


Post your comments here:

Your comments will be displayed after verification.