1. We have moved from vBulletin to XenForo and you are viewing the site in the middle of the move. Though the functional aspect of everything is working fine, we are still working on other changes including the new design on Xenforo.
    Dismiss Notice

Pointer and reference similar at assembly level

Discussion in 'C' started by kaustubh, Aug 15, 2007.

  1. kaustubh

    kaustubh New Member

    Pointer and reference maybe same at assembly level.
    Try an experiment :

    Code:
    # include<stdio.h>
    int main()
    {
      int i =90;
      int *pointer;
      int &reference = i; // Line 6
      pointer = &i;  
      return 0;  // Line 8
    }
    compile it to assembly with Microsoft c++ like this :
    Code:
    c:\ cl /Fa filename.cpp
    or with gcc like
    Code:
    c:\ gcc -S -masm=intel filename.cpp
    Open the asm file like c:\ notepad filename.asm

    Now you can the code of i, pointer, and reference;

    Code:
     Line 6
    	mov	DWORD PTR _i$[ebp], 90			; int i = 90;
    ; Line 8
    	lea	eax, DWORD PTR _i$[ebp]                  ; int &reference = i;
    	mov	DWORD PTR _reference$[ebp], eax
    ; Line 9
    	lea	ecx, DWORD PTR _i$[ebp]               ; int *pointer
    	mov	DWORD PTR _pointer$[ebp], ecx    ;  pointer = &i;
    
    you see the code for pointer is exactly same as reference .
     
  2. DaWei

    DaWei New Member

    That's because C doesn't have references like C++. The & is strictly an address-of operator.
     
  3. shabbir

    shabbir Administrator Staff Member

    He is using a cpp file and so the compiler is C++.
     
  4. kaustubh

    kaustubh New Member

    Dawei i am using c++ compiler if you don't believe me see this code

    Code:
    #include<iostream>
    
    int main()
    {
    int i =90;
      int *pointer;
      int &reference = i; 
      pointer = &i;  
      return 0;  
    }
    
    
    Code:
    	
           mov     DWORD PTR _i$[ebp], 90			;  int i = 90
    
    	lea	eax, DWORD PTR _i$[ebp]                  ; int &reference = i; 
    	mov	DWORD PTR _reference$[ebp], eax
    
    	lea	ecx, DWORD PTR _i$[ebp]                  ; pointer = &i;
    	mov	DWORD PTR _pointer$[ebp], ecx
    	
    
    the code of reference is same as code of pointer.
     
  5. rajkumar_singhalmca

    rajkumar_singhalmca New Member

    the pointer is very ueful when the use in the right way otherwise it can be damaged the our memory location.
     

Share This Page