zoukankan      html  css  js  c++  java
  • Delphi中Pointer的使用

    var p1,p2,p3:pointer
    S:String;
    I:Integer;
    begin
    p1:= Pointer(S);
    p2:= @S;
    P3:= pchar(s);

    // p1 和 p2 p3 有什么区别吗?

    procedure TForm1.FormCreate(Sender: TObject);
    begin
     s:='abcdef';
    end;   我们用这种方式来赋值  s 是一个全局变量 

    p1:=Pointer(S);

    45ecd8 是s  的指针的指针  所以这2句话是  指针的复制  

    p2:= @S;

       指针的指针  赋值给  指针

    p3:=pchar(s);

      

    call 404ca4在下面

    和第一个类似   就是把string中的数据(去掉引用计数和大小 之外的数据) 指针 

    复制了一份

    不过  以上3中情况  汇编中 都没有引用 string的指针   全部都是直接引用   string 去掉引用计数和大小的指针  也就是后移12个字节 (大小+引用计数

    +长度)的指针 

    看起来  delphi 对全局变量string的引用 是指针调用   

    如果把s:integer的话  结果是

    p1:=Pointer(S);  图1 就是 指针中的值 复制到另一个指针中做数值   也就是 传递了 数值

    p2:= @S;             图2  是传递了指针

    另外 有趣的是  如果s 作为局部变量    3种代码 反汇编是一模一样的   都采用经典的 xchge [eax],edx 形式  [eax],为栈地址

    p3:=pchar(s);   图3  类似图1

    记录Coding学习过程中的点点滴滴,记性不好,特别需要这么一个博客 逸'Coding'Blog
  • 相关阅读:
    QR 编码原理(二)
    QR二维码原理(一)
    UML类图表达
    位运算以及逻辑运算
    SLAM数据集整理
    graph slam BACK END 相关技术资料收集
    Topic与Queue
    集群、分布式与微服务
    spring手动配置
    spring项目gitignore
  • 原文地址:https://www.cnblogs.com/yilongm/p/2863471.html
Copyright © 2011-2022 走看看