有这个疑问,实质上是对delphi的字符串不是很了解导致的。S: String 在这个定义中,S本身是一个指针,SizeOf(S) 不论你是否给S赋值,其值永远是是4(如果想知道一个字符串的长度,使用Length(S)),S 是一个指向实际字符串内容的指针,也就是实际字符串的首地址。S: String[12] 这种声明,和上面的声明是有区别的,这样的声明 SizeOf(S)其结果是13,为什么是13呢?因为这种声明实际上是声明了一个 短字符串,短字符串的结构是第一个字节保存着字符串长度,随后的字节保存着字符串的值,也就是实际字符串好了,上面的说完了。那说说结构中使用字符串时候需要注意的问题吧:如果是想对结构中的内容整体的复制、保存等,最好使用字符数组,因为字符数组能真实地按照你定义的大小反映实际大小,而采用 String[12]这种形式,实际占有内存大小会比形式上多一个,而 String 形式,则不论你的字符串是什么内容,其结构中占用的大小永远是4。这样的定义是不能直接使用move 或者 copy...等函数直接操作结构体变量的(操作了也没有用,还会引起更大的麻烦,因为 String 是一种可计数的资源,其释放与否与其引用计数有关,而直接采用move的方式复制结构体的内存不会改变计数,单却多出来一个引用)是不是字符串就不能被定义到结构中呢?那到也不是,就是在定义之后,对结构体的复制操作要自己定义出来,不过这样的定义,还不如定义一个类来的方便(类本身就是对一种数据以及对这种数据的操作的一种定义)。