Are reference and
pointers same?
No.
I have seen this confusion
crumbling up among the student from the first day. So better clear out this
confusion at thevery beginning.
Pointers and reference
both hold the address of other variables. Up to this they look similar, but
their syntax and further consequences are totally different. Just consider the
following pieces of code
Code 1 Code 2
int i; int i;
int *p = &i; int
&r = i ;
Here in code 1
we have declared and defined one integer pointer p which points to variable i,
that is now , p holds the address of i.
In code 2, we
have declared and defined one integer reference r which points to variable i,
that is now, r holds the address of i. This is completely same as that of p.
So where is the
difference?
The first difference
can be found just by looking at the code. Their syntaxes!
Secondly the
difference will come up when they would be used differently to assign a value
(suppose 10) to i.
If
you are using a pointer, you can do it like *p = 10; but if you
are using a reference, you can do it like r = 10. Just be careful to understand that when you
are using pointers, the address must be dereferenced using the *, whereas, when
you are using references, the address is dereferenced without using any
operators at all.
This
notion leaves a huge effect as consequences. As the address of the variable is
dereferenced by * operator, while using a pointer, you are free to do any arithmetic
operations on it. That is you can increment the pointer p to point to the next
address just by doing p++. But, this is not possible using
references. So a pointer can point to
many different elements during its lifetime; where as a reference can refer to
only one element during its life time.
Does
C language support references?
No. The concept of reference has been
added to C++, not in C. So if you run the following code, C compiler will
object then and there.
#include<stdio.h>
#include<conio.h>
int main(void)
{
int i;
int &r = i;
r = 10;
printf("\n
Value of i assigned with reference r = %d",i);
getch();
return 0;
}
But if you are using any C++ compiler,
this code will work fine as expected.
If
there is no concept of reference in C language, then how come there exists C function
call by reference?
Strictly speaking, there is no concept
of function call by reference in C language. C only supports function call by
value. Though in some books ( I will not name any one) it is written that C
supports function call by reference or the simulation of function call by reference can be achieved
through pointers, I will strongly say that C language neither directly supports
function call by reference, nor provides any other mechanism to simulate the
same effect.
I know you are at your toes to argue
that what about calling a C function with address of a variable and receiving
it with a pointer? The change made to that variable within the function has a
global effect. How this cannot be treated as an example of function call by
reference?
You probably argue with a code like
following
#include<stdio.h>
#include<conio.h>
void foo(int* p)
{
*p = 5;
printf("\n Inside foo() the value of the
variable: %d",*p);
}
int main(void)
{
int i = 10;
printf("\n
before calling foo() the value of the variable:
%d",i);
foo(&i);
printf("\n
after calling foo() the value of the
variable: %d",i);
getch();
return 0;
}
Your
code will show the result as
Your points are well taken. But
the thing is what you are showing is not at all calling a function by reference.
It just the function call by value! Here you are essentially copying the value
of address of your variable i and calling the function foo with that copy. Now
eventually in this case, the value that is being passed contains the address of
another variable. Within the function, you are accepting this value with a
pointer and changing the
value of the content addressed by that pointer. So it
is nothing but a function call by value only.
Please note that to change the
value of the content addressed by a pointer, you are to use *, no way could it be
thought of as a reference.
Now let me give you one example of
true function call by reference
#include<stdio.h>
#include<conio.h>
void
foo (int& r1)
{
r1 = 5;
printf("\n Inside foo() the value of
the variable: %d", r1);
}
int
main(void)
{
int i = 10;
int &r = i;
printf("\n before calling foo() the value of the variable: %d",i);
foo(r);
printf("\n after calling foo() the value of the variable: %d",i);
getch();
return 0;
}
Will this run with your C
compiler? No.
Note:: I have used DevC++ as the coding platform
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.