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
  • 相关阅读:
    matlab练习程序(灰度图直方图均衡化)
    二叉查找树
    hadoop入门介绍
    配置虚拟机Ubuntu网络连接
    hadoop ubuntu (单节点)部署
    Thrift
    linux打包压缩命令汇总
    [转载]ubuntu 启动流程
    linux命令大全
    Linux文件查找命令find,xargs详述
  • 原文地址:https://www.cnblogs.com/yilongm/p/2863471.html
Copyright © 2011-2022 走看看