//字符串 < > 字符数组 var arr: array[0..5] of Char; str: string; begin {可以把字符串常量直接赋给字符数组; 但超界不行} arr := 'Delphi'; ShowMessage(arr); {Delphi} {可以把字符数组直接赋给字符串变量} str := arr; ShowMessage(str); {Delphi} {其实字符串内部也是包含了一个字符数组, 所以能索引访问, 不过它的索引起始于 1} ShowMessage(str[1]); {D} ShowMessage(arr[0]); {D} {但不能把一个字符串变量赋给字符数组} //arr := str; {错误; 这需要用其他手段实现, 譬如复制或移动内存} end;
//字符数组 > 字符指针 var arr: array[0..6] of Char; p: PChar; begin arr := 'Delphi'; {如果直接把字符数组给字符指针, 结果不保险, 因为字符指针要找空字符(#0)结束} {把数组的最后一个元素给 #0 就可以了} arr[Length(arr)-1] := #0; p := arr; ShowMessage(p); {Delphi} {假如把 #0 给到中间会怎样?} arr[3] := #0; p := arr; ShowMessage(p); {Del; 给截断了} end;
//字符串常量 > 字符数组常量
const arr1: array[0..5] of Char = 'Delphi'; arr2: array[0..5] of AnsiChar = AnsiString('Delphi'); begin ShowMessage(arr1[0]); {D} ShowMessage(arr2[0]); {D} end;