C++ Programming - References - Discussion
Discussion Forum : References - General Questions (Q.No. 1)
1.
Which of the following statement is correct?
Discussion:
25 comments Page 1 of 3.
Andrey said:
8 years ago
Reference like a restricted pointer.
Reference can be stored on the stack or on the heap.
It is up to you in C++.
Example:
#include <stdlib.h>
#include <string>
#include <vector>
struct LinkedNode
{
LinkedNode(const std::string & val)
: value(val)
, next(*this)
{
}
LinkedNode(const std::string & val, LinkedNode & nextn)
: value(val)
, next(nextn)
{
}
bool islast() const
{
return (this == &next);
}
std::string value;
/**
* THIS REFERENCE CAN BE STORED ON THE HEAP OR ON THE STACK
**/
LinkedNode & next;
};
int main(int argc, char * argv[])
{
{
/***
* on stack
***/
LinkedNode n5("last node");
LinkedNode n4("node 4", n5);
LinkedNode n3("node 3", n4);
LinkedNode n2("node 2", n3);
LinkedNode n1("first", n2);
printf("%s\n", n5.islast() ? "true" : "false");
printf("%s\n", n1.islast() ? "true" : "false");
}
{
/***
* on heap
***/
LinkedNode * n5 = new LinkedNode("last node");
LinkedNode * n4 = new LinkedNode("node 4", *n5);
LinkedNode * n3 = new LinkedNode("node 4", *n4);
LinkedNode * n2 = new LinkedNode("node 4", *n3);
LinkedNode * n1 = new LinkedNode("first", *n2);
printf("%s\n", n5->islast() ? "true" : "false");
printf("%s\n", n1->islast() ? "true" : "false");
}
return 0;
}
Reference can be stored on the stack or on the heap.
It is up to you in C++.
Example:
#include <stdlib.h>
#include <string>
#include <vector>
struct LinkedNode
{
LinkedNode(const std::string & val)
: value(val)
, next(*this)
{
}
LinkedNode(const std::string & val, LinkedNode & nextn)
: value(val)
, next(nextn)
{
}
bool islast() const
{
return (this == &next);
}
std::string value;
/**
* THIS REFERENCE CAN BE STORED ON THE HEAP OR ON THE STACK
**/
LinkedNode & next;
};
int main(int argc, char * argv[])
{
{
/***
* on stack
***/
LinkedNode n5("last node");
LinkedNode n4("node 4", n5);
LinkedNode n3("node 3", n4);
LinkedNode n2("node 2", n3);
LinkedNode n1("first", n2);
printf("%s\n", n5.islast() ? "true" : "false");
printf("%s\n", n1.islast() ? "true" : "false");
}
{
/***
* on heap
***/
LinkedNode * n5 = new LinkedNode("last node");
LinkedNode * n4 = new LinkedNode("node 4", *n5);
LinkedNode * n3 = new LinkedNode("node 4", *n4);
LinkedNode * n2 = new LinkedNode("node 4", *n3);
LinkedNode * n1 = new LinkedNode("first", *n2);
printf("%s\n", n5->islast() ? "true" : "false");
printf("%s\n", n1->islast() ? "true" : "false");
}
return 0;
}
Rajendra said:
1 decade ago
I read all above comments, I have a question regarding reference. Some people system it is stored on stack, some says it is stored on heap that means reference has physical existence in memory (stack/heap).
Then why many of the c++ books says that "it is always better to use reference instead of variable in function formal parameter list because it doesn't reserve memory". This statement means that reference doesn't have physical existence. How this contradiction get solved?
Then why many of the c++ books says that "it is always better to use reference instead of variable in function formal parameter list because it doesn't reserve memory". This statement means that reference doesn't have physical existence. How this contradiction get solved?
Abc said:
1 decade ago
A pointer can be re-assigned any number of times while a reference can not be re-seated after binding.
Pointers can point nowhere (NULL) , whereas reference always refer to an object. You can't take the address of a reference like you can with pointers
There's no "Reference Arithmetic" (but you can take the address of an object pointed by a reference and do pointer arithmetic on it as in &obj + 5).
Pointers can point nowhere (NULL) , whereas reference always refer to an object. You can't take the address of a reference like you can with pointers
There's no "Reference Arithmetic" (but you can take the address of an object pointed by a reference and do pointer arithmetic on it as in &obj + 5).
Wouter van ooijen said:
1 decade ago
A reference is syntactic sugar for a pointer. It it can be stored either global, on the stack, or on the heap.
int a;
int &b{ a }; // global.
f(){
int &b{ a }; // on the stack.
}
struct ref{ int &b; ref( int &x ): b{ x }{} };
ref * p = new( a ); // p->b is on the heap.
int a;
int &b{ a }; // global.
f(){
int &b{ a }; // on the stack.
}
struct ref{ int &b; ref( int &x ): b{ x }{} };
ref * p = new( a ); // p->b is on the heap.
Saurabh said:
1 decade ago
Actually cpp uses Reference model for user defined data types (like classes, enum etc) , so when a reference is created then actually no object is created in fact reference points to heap object and it is (reference) stored on stack.
Mohan said:
10 years ago
#include<iostream>
using namespace std;
class abc
{
int i = 10;
int &j = i;
int &g = i;
cout<<"size is"<<sizeof(class abc)<<endl;
};
Output will be 12. So it gets space in stack.
using namespace std;
class abc
{
int i = 10;
int &j = i;
int &g = i;
cout<<"size is"<<sizeof(class abc)<<endl;
};
Output will be 12. So it gets space in stack.
(1)
Divya said:
8 years ago
If you see the memory management in c, local variables, function return addresses and formal arguments are stored in stack section.
So, reference is nothing but the address that's stored in stack section.
So, reference is nothing but the address that's stored in stack section.
Sourabh k said:
1 decade ago
Its true that reference is stored in stack.
Cause reference just point or refer to any local variable.
And any local variable has stack memory.
So Indirectly reference is stored in stack.
Cause reference just point or refer to any local variable.
And any local variable has stack memory.
So Indirectly reference is stored in stack.
(1)
Chandan said:
1 decade ago
A reference is stored on heap because dynamically allocation is stored in heap and reference create at run time. So yes its 100% right.
Stack is used to store local variable basically.
Stack is used to store local variable basically.
(1)
ABC said:
1 decade ago
Stack memory used by automatic variables, the difference between reference variable.
Pointer is this Heap memory dynamically allocated at execution time.
Pointer is this Heap memory dynamically allocated at execution time.
Post your comments here:
Quick links
Quantitative Aptitude
Verbal (English)
Reasoning
Programming
Interview
Placement Papers