原来那东西和C++里面的
struct{
...;
union{
...
};
}
基本是一回事啊,真实晕死了,可由哪个高手能给解释一下,那个所谓的标志位除了标示作用以外还有什么用处阿?

解决方案 »

  1.   

    回复人: aiirii(ari-爱的眼睛) ( ) 信誉:367 
    序列號??我的水平还够,能否详细一点?
      

  2.   

    如:
    // 数据包头
       structClientPackHead = Record
             uPackLength : longword;                                    // 包长度
             uFlag : longword;                                          // 包标志
             cRequire : byte;                                           // 请求
             cAnswer : byte;                                            // 应答
             cCRC : array[0..5] of byte;                                // CRC校验
       end;
      

  3.   

    变体记录,其实和c中的联合union实则是一个概念
      

  4.   

    回复人: insert2003(高级打字员) ( ) 信誉:110  
    呵呵,还是没看出来和标志位有什么关系阿?比较苯,希望大虾不要烦,呵呵,
      

  5.   

    回复人: iBear(大熊 不要怀疑我的温柔) ( ) 信誉:99  
    变体记录,其实和c中的联合union实则是一个概念
    不敢苟同,其实还是有一些差别的,如:
    C/C++
      union{
        int o;
        int a;
        char b;
    }CTest;
      sizeof(Ctest) = 4 //在32位操作系统下delphi
      TTest = packed record
        other : integer;
        case  test:boolean of
        true : (a:integer;) ;
        false: (b:char;);
      end;  sizeof(TTest) = 9 //在32位操作系统下呵呵,因为对于变体纪录只有case of 部分与c/c++的union是相对应的 呵呵
      

  6.   

    可变部分同union
    不变部分同struct
      

  7.   

    >>那个所谓的标志位除了标示作用以外还有什么用处阿?没有任何作用
      

  8.   

    如果有作用的话
    c中的union也应该加上了
      

  9.   

    回复人: 549too(接分专用马甲) ( ) 信誉:100  
    >>那个所谓的标志位除了标示作用以外还有什么用处阿?没有任何作用
    如果有作用的话
    c中的union也应该加上了
    呵呵,我想也不错可是不知道你注意到过这段代码吗?TMessage = packed record
        Msg: Cardinal;
        case Integer of
          0: (
            WParam: Longint;
            LParam: Longint;
            Result: Longint);
          1: (
            WParamLo: Word;
            WParamHi: Word;
            LParamLo: Word;
            LParamHi: Word;
            ResultLo: Word;
            ResultHi: Word);
      end;
    呵呵,这段代码就有一些蹊跷了,这个integer类型根本就没有实例,或者说在传递这个参数时,你能告诉我他是怎么转换的呢?
      

  10.   

    不是什么序列号吧!
    应该是变体的情况数量。
    一般情况下就Boolean (True/False)两种情况就可以了
    如果情况多的话,也可以用Integer啦!
      

  11.   

    呵呵,看来是贴子太无聊了,大家都懒的讨论,明天下午五点结贴,又喜欢讨论delphi语言层面东西的可以通过QQ和我聊聊,呵呵
      

  12.   

    回复人: dext(德克斯特) ( ) 信誉:116  
    不是什么序列号吧!
    应该是变体的情况数量。
    一般情况下就Boolean (True/False)两种情况就可以了
    如果情况多的话,也可以用Integer啦!
    呵呵,谢谢这位大虾的支持,不过我猜你肯定发现了其实这个标志位基本上没有什么用的,所以对他进不进行实例化都是无所谓的,其实他就是给编译器发出一个信息,告诉编译器从这里以后到本record定义结束之间的这块数据去分配空间的时候注意一些。制分配最大的那一块就够了,呵呵。可是这样却会浪费一个标志位的空间阿,在现在看来当然是没什么问题了,就一个字节而已,可是在上世纪60年代也会这么认为吗?^o^开个玩笑,呵呵。不过他倒是对内存空间重新解释提供了足够的方便,在重新解释这块内存的时候省了声明一个指针,又节省一个指针空间,抵消损失?^o^呵呵,开个玩笑又。
    最近来csdn到delphi板块一转发现竟然把基础类给合并了,感觉不太爽,希望能开个头,提提人气^o^,反正吹牛又不上税,^o^……
      

  13.   

    最近来csdn到delphi板块一转发现竟然把基础类给合并了,感觉不太爽,希望能开个头,提提人气^o^,反正吹牛又不上税,^o^……
    指靠我给csdn、delphi基础类提人气,口气太大怕有误会,特此声明^o^……
      

  14.   

    呵呵
    来接分的http://lysoft.7u7.net
      

  15.   

    恭喜楼主!其实delphi中许多东西和C++极其相似
      

  16.   

    很不错!我也学DELPHI!
    共享一下楼主的经验了!