有些基本的问题,想请教各位前辈。谢谢。
  TVarData = packed record //packed什么意思呢?
    case Integer of //这个Integer是什么意思?怎么来的呢?
      0: (VType: TVarType; //下面的写法是什么意思?
          case Integer of
            0: (Reserved1: Word;
                case Integer of
                  0: (Reserved2, Reserved3: Word;
                      case Integer of
                        varSmallInt: (VSmallInt: SmallInt);
                        varInteger:  (VInteger: Integer);
                        varSingle:   (VSingle: Single);
                        varDouble:   (VDouble: Double);
                        varCurrency: (VCurrency: Currency);
                        varDate:     (VDate: TDateTime);
                        varOleStr:   (VOleStr: PWideChar);
                        varDispatch: (VDispatch: Pointer);
                        varError:    (VError: HRESULT);
                        varBoolean:  (VBoolean: WordBool);
                        varUnknown:  (VUnknown: Pointer);
                        varShortInt: (VShortInt: ShortInt);
                        varByte:     (VByte: Byte);
                        varWord:     (VWord: Word);
                        varLongWord: (VLongWord: LongWord);
                        varInt64:    (VInt64: Int64);
                        varString:   (VString: Pointer);
                        varAny:      (VAny: Pointer);
                        varArray:    (VArray: PVarArray);
                        varByRef:    (VPointer: Pointer);
                     );
                  1: (VLongs: array[0..2] of LongInt);
               );
            2: (VWords: array [0..6] of Word);
            3: (VBytes: array [0..13] of Byte);
          );
      1: (RawData: array [0..3] of LongInt);
  end;
我是新手,帮助也看不太明白,所以向大家请教。谢谢。

解决方案 »

  1.   

    packed 什么也不是!
    Integer是类型定义
    至于后面,不知道该怎么说!!
      

  2.   

    看书吧,问题是你对pascal熟悉吗
      

  3.   

    packed 怎么会什么也不是呢?那写它干什么呢?
    Integer是从哪里来的呢?值是什么呢?
      

  4.   

    在一般情况下,结构体里面的内容是按照字或者双字对齐的形式在内存中存放的,这样CPU在读写的时候就会快很多。加了packed则不再考虑这种对齐,将数据都紧密相临放在一起,好处是节省内存空间,不过牺牲了速度。
    典型的时间换空间,空间换时间例子。
      

  5.   

    http://search.csdn.net/Expert/topic/2460/2460034.xml?temp=4.063052E-02
      

  6.   

    packed 表示不对齐(align),所有元素都紧密排列。非packed的record,就是对齐了的,为了访问的速度,对元素的起点进行了对齐的处理。
    比如:
    TVarData = record
      A: Char;
      B: SmallInt;
    end;
    如果B开始于2的倍数的地址,存取速度会比较快
    所以它从字节2开始存放,而a从0开始,字节1就没用上,是个空的,整个record占用4个字节。TVarData = packed record
      A: Char;
      B: SmallInt;
    end;
    不进行对齐,一个挨一个存放,b直接跟在a后面,从字节1开始存放,整个record占用3个字节,但是存取速度会慢一点。 
      

  7.   

    case Integer of
    相当于C/C++的 union...1. 就是多种数据结构存储在同一个内存块里
    2. 该内存块的空间由其中最大的数据结构确定
    3. 数据可以直接取出 不过你要知道其中数据是否具有意义。。
      

  8.   

    多看看pascal基礎的書吧。
    樓主好像對編程的基礎不是很了解呀,學過幾天C的,上面都會知道是什麼意思呀。
      

  9.   

    关于packed,楼上已经解释的相当明白,关于case integer of
    这代表这个记录有多种解释
    如:
    TVarData = packed record 
          RawData: array [0..3] of LongInt;
        end;
    TVarData = packed record 
         VWords: array [0..6] of Word;
        end;
    TVarData = packed record 
         VBytes: array [0..13] of Byte;
        end;
    等等