例如,下面的类型声明可以用于存储零结尾字符串:
type
TIdentifier = array[0..15] of Char;
TFileName = array[0..259] of Char;
- 52 -
Data types, variables and constants
TMemoText = array[0..1023] of WideChar;
当启用扩展语法时({$X+},这是默认的),你可以把一个字符串常量,赋给一个0下标开始的静态字符数组(动态数组此时不能工作)。当用字符串常量初始化一个字符数组时,若字符串的长度比数组声明的长度要短,其余的字符被设置为#0。(注:当用字符串常量给一个字符数组赋值时,结果也总是如此。) Using pointers, arrays, and string constants(使用指针、数组和字符串常量) 要操作零结尾字符串,要经常需要指针。字符串常量和类型PChar、PWideChar是赋值兼容的,后两者表示指针,它们指向一个以0结尾的Char或WideChar字符数组。比如:
var P: PChar;
...
P := 'Hello world!'; (注:编译器在字符串的末尾添加一个NULL)
使P指向一个内存区域,在这里存储着'Hello world!' ,它的结尾被添加一个NULL
果相同:
const TempString: array[0..12] of Char = 'Hello world!'#0;
var P: PChar;
...
P := @TempString; (注:和P := TempString相同)
另外,对于使用PChar或PWideChar类型、并采用传值或常量参数的函数,你也可以给它传递字符串常量,比如StrUpper('Hello world!')。当给PChar赋值时,编译器创建一个以0结尾的字符串的拷贝a null-terminated copy of the string。注:其实只有一个字符串,PChar变量是一个指向它的指针)数传递一个指向这个拷贝的指针。当然,你也可以初始化一个PChar或PWideChar
const
Message: PChar = 'Program terminated';
Prompt: PChar = 'Enter values: ';
Digits: array[0..9] of PChar = (
'Zero', 'One', 'Two', 'Three', 'Four',
'Five', 'Six', 'Seven', 'Eight', 'Nine');
0下标开始的字符数组和PChar以及PWideChar兼容。当使用字符数组代替一个指针(值)时,编译器把数组转换为一个指针常量,它的值对应于数组的第一个元素的地址(也就是数组的地址)var
MyArray: array[0..32] of Char;
MyPointer: PChar;
begin
MyArray := 'Hello';
MyPointer := MyArray; (注:和@MyArray相同)
SomeProcedure(MyArray);
SomeProcedure(MyPointer);
end;
上面的代码使用同一个值调用SomeProcedure两次。
一个字符指针(PChar或PWideChar)可以像数组一样使用索引。在上面的例子中,
字符H。索引实际上指定了一个偏移量(对PWideChar变量,索引自动乘以2)。这样,如果
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-23665-35.html
x)fighting