• 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

  • 相关阅读:
    dedecms 5.7 站点文件从本地子目录上传到远程根目录后找不到模板的解决方案
    Dedecms实现"文章标题2级栏目1级栏目网站名"
    织梦安装在子目录会出现问题的解决技巧集合
    ASP.NET三层架构中数据层数据访问类部分代码
    织梦DEDECMS缩短URL路径长度的方法
    CSS各种属性全集
    css和js引用图片路径
    ASP.Net中FileUpLoad控件内容清空
    WampServer的配置
    asp.net 中的 callback
  • 原文地址:https://www.cnblogs.com/flay/p/2727436.html
Copyright © 2020-2023  润新知