刚回顾了一下字符串,遇到一个问题,还望大神们赐教:
var
s : String;
begin
s :='a'; //这块地方为什么不用显式的分配空间,编译器帮我们做了什么事?
s[1] :='a'; //这里就出了问题,需要用SetLength()分配空间
end;
如果在定义的时候这样写,也没问题。
s : String[1];
s :='a' 重载了 = 操作符,先分配空间,然后拷贝字符串;
s[1] 直接下标访问,没有分配操作。
s : String[1]; 分配了空间。
然后我要告诉你的是,这不是编译器帮你做了啥的问题,而是语法是这么设计的,编译器只是支持此种语法。
感谢大神赐教