top button
Flag Notify
    Connect to us
      Site Registration

Site Registration

What is difference between pointer in C and references in C++?

0 votes
940 views
What is difference between pointer in C and references in C++?
posted Jan 7, 2015 by Amit Kumar Pandey

Share this question
Facebook Share Button Twitter Share Button LinkedIn Share Button

2 Answers

+1 vote
 
Best answer
  1. A pointer can be re-assigned:
    int x = 5;
    int y = 6;
    int *p;
    p = &x;
    p = &y;
    *p = 10;
    assert(x == 5);
    assert(y == 10);
    A reference cannot, and must be assigned at initialization:
    int x = 5;
    int y = 6;
    int &r = x;
  2. A pointer has its own memory address and size on the stack (4 bytes on x86), whereas a reference shares the same memory address (with the original variable) but also takes up some space on the stack. Since a reference has the same address as the original variable itself, it is safe to think of a reference as another name for the same variable. Note: What a pointer points to can be on the stack or heap. Ditto a reference. My claim in this statement is not that a pointer must point to the stack. A pointer is just a variable that holds a memory address. This variable is on the stack. Since a reference has its own space on the stack, and since the address is the same as the variable it references. More on stack vs heap. This implies that there is a real address of a reference that the compiler will not tell you.

    int x = 0;
    int &r = x;
    int *p = &x;
    int *p2 = &r;
    assert(p == p2);

  3. You can have pointers to pointers to pointers offering extra levels of indirection. Whereas references only offer one level of indirection.

    int x = 0;
    int y = 0;
    int *p = &x;
    int *q = &y;
    int **pp = &p;
    pp = &q;//*pp = q
    **pp = 4;
    assert(y == 4);
    assert(x == 0);

  4. Pointer can be assigned NULL directly, whereas reference cannot. If you try hard enough, and you know how, you can make the address of a reference NULL. Likewise, if you try hard enough you can have a reference to a pointer, and then that reference can contain NULL.

    int *p = NULL;
    int &r = NULL; <--- compiling error

  5. Pointers can iterate over an array, you can use ++ to go to the next item that a pointer is pointing to, and + 4 to go to the 5th element. This is no matter what size the object is that the pointer points to.

  6. A pointer needs to be dereferenced with * to access the memory location it points to, whereas a reference can be used directly. A pointer to a class/struct uses -> to access it’s members whereas a reference uses a ..
  7. A pointer is a variable that holds a memory address. Regardless of how a reference is implemented, a reference has the same memory address as the item it references.
  8. References cannot be stuffed into an array, whereas pointers can be (Mentioned by user @litb)
  9. Const references can be bound to temporaries. Pointers cannot (not without some indirection):

    const int &x = int(12); //legal C++
    int *y = &int(12); //illegal to dereference a temporary.

This makes const& safer for use in argument lists and so forth.

answer Dec 8, 2015 by Shivaranjini
+1 vote
  1. In C language pointers are used to point a variable or structure or function etc. In C++ reference is always refer to an object.
  2. Pointer to pointer we can consider but reference to a reference is not valid. I mean you cannot take the address of a reference.
  3. Arithmetic operations of pointers are possible, but the same is not valid for references.
answer Aug 10, 2015 by Katakam Ranjit Kumar
Similar Questions
+4 votes

Can someone explain me the usage of function pointer? Probably with real time examples ?

+1 vote

int arr[ ] = { 1, 2 };
p = arr; /* p is pointing to arr */

How pointer p will behave ?

...