• 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
  • 相关阅读:
    SVG平移和缩放(鼠标滚轮)的实现
    CSS之容器水平垂直居中
    CSS之flex布局
    CSS之鼠标悬停——内容变深/变浅
    CSS之clip-path绘制多边形
    axios
    .Net 反射
    Redis
    .Net Core GRPC报错
    Python 京东云无线宝消息推送
  • 原文地址:https://www.cnblogs.com/yilongm/p/2863471.html
Copyright © 2020-2023  润新知