在C语言中可以使用sizeof得到变量的存储空间的大小。
在delphi中也有同样的函数。
但是对于一个string类型。
比如
var
 mstr:string;
 mvar:varible;
 t1,t2,tvar:integer;
begin
 mstr := '123';
 t1 := sizeof(mstr);
 mvar := mstr;
 tvar := sizeof(mvar);
 mstr := '1234567890';
 t2 := sizeof(mstr);
end;
t1和t2得出的值都是4.
tvar得出的值是16
我到底该怎么看到底用了多少存储空间

解决方案 »

  1.   

    1 varible本身只是一个长16的结构,
    2 string可以通过string[0]或者length得到
    3 对象的大小通过intancesize得到
      

  2.   

    String 类型其实可以当作 array of Char 动态数组类型, 内在的相当于是 Pointer 类型, 所以SizeOf(String) = 4
    而 Variant 类型其他是一个结构类型 SizeOf(Variant) = 16
    SizeOf 得到的是类型的尺寸不一定是存储空间的尺寸如:
    var
       strTemp: String[100];
    begin
       if SizeOf(strTemp) = 100 then
          ShowMessage('is True.')
       else
          ShowMessage('is False');
    end;
    这里的 String[100] 其实是静态的字符串数组类型若要知道字符串的长度可以使用: Length(str) 函数.
      

  3.   

    嘿~~~~string变量实际上是指向一个字符结构的指针。当然是4个字节拉。而Delphi中无法在栈上面创建对象。全部都是在堆上面创建的,学过C++没有??嗬嗬。C++中堆上面创建对象的语法通常是: myClass *i=new myClass();这个i的大小当然也是4拉,Delphi中也是差不多的。要得到对象的大小,必须要通过InstanceSize静态方法得到。
      

  4.   

    得到字串长度可以用LENGTH().
    如果你定义STRING时指定了空间,用SIZEOF()可得出正确长度.
      

  5.   

    firetoucher(风焱)
    2 string可以通过string[0]或者length得到
    -----------------------------------------------------
    在现在的delphi版本里,用string[0]可能会有问题
      

  6.   

    对字符串等用length('字符串')可以得出长度。