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
  • 相关阅读:
    C#socket客户端自己输入消息发送到服务端通信实现通信
    C#设计模式:观察者模式(Observer Pattern)
    C#冒泡排序法学习
    强类型和弱类型
    计算机网络基础知识总结
    推荐几个搜索资源网站
    推荐几个搜索资源网站
    前端:闭包的概念
    前端:闭包的概念
    收集12个经典的程序员段子
  • 原文地址:https://www.cnblogs.com/yilongm/p/2863471.html
Copyright © 2011-2022 走看看