Delphi 和C语言的指针相关

 在说指针时,我们不得不说一下C语言当中的指针,当然如果你没有学过C语言
  那么我觉的下面的写的内容你在理解上会有些吃力,因为本篇文章和以后的文章
  当中我会用C语言当的指针来对应的来理解D当中的指针,因为我个人觉的他们真
  的是太像了,(除了符号外);
  
  一、类型指针的定义;
  
  (1).在C语言当中我们假如我们要定义一个整形的指针变量;
  

# include <stdio.h>
  .....
       int *ptr;
       char *ptr1;
  return 0; 
   }

   
   对应的在D中是这样的定义的;
  

 var
      ptr  :^integer;  {相当于c int *ptr}
      ptr1 :^char;      {相当于c char *ptr1}

 
 二、无类型指针的定义;
 (1).在C语言当中我们如果要定义一个无类型的指针;如下
 
 

# include <stdio.h>
 ......
     void *ptr; 
   return 0;  
   }  

    
 在D当是这样定义的;{(C语言 void)=(Delphi Pointer)} 
 

 var
   ptr: Pointer;

    
三、指针的解除和引用;
    
    (1).还是用C语言当中的简单例子来说我们的D;
   

# include <stdio.h>
      ........
      ptr = &Object;
      ......
   return 0;
   }

  
   在D中则是;

var
      x, y:integer;
      p:^integer;
   begin 
    x:=17;
    p:=@x;
    y:=p^;
    
    Writeln(format('值为:%d',[y]));
    Readln;
    end;
    end.


   小结:
     前面我们说了D当中的指针和我们的C当中的指针太像了
  也就只有符号不同罢了。所以理解好D当中的指针我认为前
  提是先对C当中指针有一定的认识。这样理解起来会更好。
  
  
  
 四、指针运算。
   呵呵!还是从我们的C来说起吧!!!哥们看代码;
   
   

# include <stdio.h>
   .....
   .....
       char a[20];
       char *ptr = a;
       ptr++;
       ptr+=2;
  return 0;
  }

       
   下面我们就来看看在D中是如何实现上面的C代码;
   
     

var
        a:array[1..20] of Char;
        ptr:PChar; //我们可以将Pchar看作:^Char;
     begin 
         inc(ptr);//Inc相等于C当中的 "++";
         inc(ptr, 2); //相等于C当中的 "+=";
         
    end;

    
五、动态内在分配;
   还是照我们我们的原来的方法从C语言来说起在C语言当中我们如果要动态的分配内存则
要用到一个函数“malloc”(在头文件中包含:“malloc.h”)

# include <stdio.h>
# include <malloc.h>

int main(void)
{
     int *p, *ptr2;
     int i;
     
     
     ptr = (int*)malloc(sizeof(int) * 20);
     ptr2 = ptr;
     
         for(i = 0; i < 20; i++ )
          {
             *ptr = i;
              ptr++;
           
           }
free(ptr2);

return 0;
}

 
在D中我们是这样实现的;

var
  ptr, ptr2:^integer;
  i: integer;
begin 
 GetMem(ptr, sizeof(integer) * 2);
 //这句等价于c的ptr = (int*)malloc(sizeof(int) * 20) ;
 ptr2:=ptr;
    for i :=0 to 19 do 
      begin 
         ptr^ :=i;
         inc(ptr);
       end;
       
FreeMem(ptr2);
end;   

 

关于指针就介绍到这里,本人水平有限文章有写的不对,请大家指点。

thanks

原文地址:https://www.cnblogs.com/flay/p/2727436.html