zoukankan      html  css  js  c++  java
  • delphi中pchar、char、string的定义与区别

    Char是单个字符;
    PChar 就是指向一个以Null 结尾的每个字符为一个字节的字符串的指针。 (可以看成是一个字符串)
    String是字符数组,以字符#0结尾;


    Char只占一字节的空间,而Pchar保存的是一个指针,在现在32位的系统中占有1个指针字节的大小。
    type PChar=^Char;

     PChar类型是一个指向Char的指针,并使用Delphi的扩展语法.它也能够作为一个String或者是一个Char数组指针来对待。

    Pchar的用途

    1.PChar最经常的使用方式就是作为用C或C++编写的DLL,如Windows API的一个参数类型.
    2.可以把一个PChar作为一个Char数组指针来对待.数组下标是Integer的子区间,从零开始. Delphi不对该数组提供任何边界检查.通常字符串的结束用#0字符来表示.
    3.通常通过与INC和DEC过程相似的加减整数来完成对PChar指针的算术运算. 

    Pchar的转换

    长字符串转换到PChar不是自动的。他们之间的不同点导致他们的转换存在问题。

    1,长字符串是引用计数的,而PChar不是
    2,赋值给长字符串是数据的拷贝,而PChar是指向数据的指针。
    3,长字符串是空止符结尾,并包含有字符串的长度。而PChar是简单的空止符结尾。( 空止符结尾指以#0结尾)

    例子

    //举例:
    var
    pc: PChar;
    begin
    pc := 'ABCD' + #0 + 'EFGHIJKLMNOPQRSTUVWXYZ';
    ShowMessage(pc); {ABCD}
    end;

    这个例子表明,Pchar可以做为一个以#0结尾的char字符数组
    转换:
    string是delphi内定义类型,pchar则是一个指针字符串,后缀有#0。

    相互转换的话strpas(pchar);//pchar转成string
    strpcopy(pchar,string);
    或直接pchar(string) //string转成pchar

    string ——> char的转换

    //举例
    procedure TForm1.Button1Click(Sender: TObject);
    var
    ch:array
    [0..5] of char;
    str:string;
    i:integer;
    begin
    str :='123456';
    move(str[1],ch,length(str));//Move说明:Move(从字符串的多少位开始移,移到目标,移动多少个长度或大小,注意sizeof与legth的区别)
    for
    i:=0 to 5 do
        edit1.Text :=edit1.Text + ch[i];//show:123456
    //move(str[3],ch,4);//ch=3456
    end;

    1、使用指向字符串的指针,如果不是以0结尾,运行时就会出现错误。为了避免这种错误,需要在字符串结尾人工加入0 
    即char(0),或用strpcopy函数在字符串结尾自动加0。
    例3: 用strpcopy函数赋值会在字符串s结尾自动加0。

    var
    s:array of char; {s[0]=4 s[1]='n' s[2]='e' s[3]='w' s[4]=0;} {p-->'new'}
    p:pchar;
    begin
    p:=@s[1];

    strpcopy(p,'new');{strpcopy函数在字符串结尾自动加0}
    label1.caption:=strpas(p);{new}

    label2.caption:=s;{new}
    //label3.caption:=intTostr(integer(s[0]));{4}

    end;

  • 相关阅读:
    垂直margin为什么会重叠
    forEach()和for/in循环的缺点与for-of循环
    使用CleanWebpackPlugin插件报错原因:CleanWebpackPlugin is not a constructor
    Vue中常用的组件库
    Vue中使用keep-alive优化网页性能
    Vue中router路由异步加载组件-优化性能
    面试题-JS中的作用域相关问题
    JS中的垃圾回收机制
    【转】 SpringMVC详解(三)------基于注解的入门实例
    【转】 SpringMVC详解(二)------详细架构
  • 原文地址:https://www.cnblogs.com/phzend/p/5558234.html
Copyright © 2011-2022 走看看