1.ANSIString,WideString;
2.Char[]动态数组,静态数组;
3.PChar
4.const
不全的话请大家补充。讨论点:
1.内存中的存储结构,存取算法
2.那些用Unicode,那些用ASSIC

解决方案 »

  1.   

    楼主提的这个讨论比较有意思
    我来补充一点:
    还有ShortString、string
      

  2.   

    通常定义的string就是ansistring,当然也可以能过改变编译指示字的开关来改成widestring;
    string粗看起来也象是char数组,因为你可以用string[2]索引来访问字串中的内容.使用string的好处是你不必自己定义字符串的长度,所以你可以很轻松的将'aaa'赋给string,或是'adfasdfadsf'赋给string,不过string索引是不会检查边界的,这就意味着你可以用
    var
    s:string;
    s:='aa';
    showmessage(s[100]);//并不会出错
    而且a:string[2]与setleng(a,2)也是有区别的。a:string[2]默认是从0-2,setleng是从1-2;
    如果你事先用了string[2],在后面使用setleng来改变范围则是不起作用的.widesring与ansistring的区别是一个是双字节存放,一个是单字节存放。比如
    a:string;
    b:widestring;
    a:='中国';b:='中国'
    showmessage(a[1]+a[2]);//显示中
    showmessage(b[1]);//显示中
    因为一个汉字是由二个字节组成的。a:array[0..5] of char; //动态
    b:array[1..5] of char; //静态
    a可以赋于'abc','a','abcdef',只要不超过6位,而b却要一次把5位全赋值,
    b:='abc';//就会出错,要b:='abcde';//这才能行。
    并且动态的字符数组值默认为#0,而静态的却没有默认值,比如
    a[0]:='a';
    a[1]:='b';
    a[3]:=c';
    showmessage(a);//显示ab,这里必须要给0,和1下标赋值。不然出现的结果会出人意料,具体怎么回事还不清楚。
    b[1]:='a';
    b[2]:='b';
    b[4]:='c';
    showmessage(b);//显示ab,cw(可见这里是让5位来显示的)
    pchar类型的长度也是动态的,因为pchar本身只是一个指针,赋给它的字符串只是临时存放在内存中,然后返回首地址给pchar;
    var
    a:pchar
    a:='abcdefg1234567';
    showmessage(inttostr(length(a)));  //显示14
    showmessage(a); //显示abcdefg1234567
    a:='123456';
    showmessage(inttostr(length(a))); //显示6
    showmessage(a); //显示123456
    这里可以看到使用pchar比使用字符数组更加方便,不过有一点麻烦的是二个pchar的相加,必须要先转换:
    var
    a,b:pchar;
    a:='abc';
    b:='12345';
    showmessage(a+b);//这是编译不过的,因为在这里a和b是二个指针,如果用
    showmessage(a^+b^);//可以通过。当是返回的是a1这是因为每个指针只是指向了该字串的首地址。所以用^取的只是首字符。
    showmessage(string(a)+string(b));//显示abc12345,所以只有通过强制转换才行。const定义的是常量,根据编译指示字的开关,const有二种意思,一种是指设为const的值不能被改变,第二种是指设为const的变量为静态变量,即退出过程(函数),值仍然存在,同时用const的好处是可以给数组初始化。比如:
    const
    a:array[0..4] of char='ac';
    b:array[1..4] of char='abcd';short与long指能赋于的字符长度不同
    ansi与wide指读取字符时的长度不同这里我只是简单说一下,并不是很完整的。如有错误请指出
      

  3.   

    string补充一下
    1.作为数组使用时首位元素是1不是0
    2.setlength函数用于string类型时只分配内存,内存值不作初始化