pascal编程语言中 声明 record 类型中的 case 用法,多谢 30
3个回答
展开全部
很简单,case关键字后面跟上某种类型,然后分支的序号与该类型保持一致就行,例如:
type
IntRec1 = packed record
ID: ShortString;
case Integer of
3: (
Param: Integer);
5: (
ParamLo: Word;
ParamHi: Byte);
end;
IntRec2 = packed record
ID: ShortString;
case Char of
'c': (
Param: Integer);
'e': (
ParamLo: Word;
ParamHi: Byte);
end;
IntRec3 = packed record
ID: ShortString;
case Boolean of
True: (
Param: Integer);
False: (
ParamLo: Word;
ParamHi: Byte);
end;
1、以上Param和ParamLo/ParamHi是变体结构的两个不同分支,可以用Param域直接访问该变体的整数部分(Integer),也可以用ParamLo域访问该整数部分的低16位(Word),用ParamH域i访问高8位(Byte)。
2、变体结构的大小,取决于占空间最大的分支,如本题中Integer(4字节)>Word(2字节)+Byte(1字节),因此本题三个变体结构大小均为256+4=260字节。
3、case后面的类型与分支标识的类型保持一致就行了,分支标识随便写什么都行(Integer与3、5,Char与'c'、'e',Boolean与True、False)。以上三种声明方法都声明的同一种类型。
4、为了能精确访问变体结构的域,一般要加packed关键字,防止编译器自动对齐。
5、变体结构在日常编程中用的不多,它大量使用在对Windows API的翻译中。
type
IntRec1 = packed record
ID: ShortString;
case Integer of
3: (
Param: Integer);
5: (
ParamLo: Word;
ParamHi: Byte);
end;
IntRec2 = packed record
ID: ShortString;
case Char of
'c': (
Param: Integer);
'e': (
ParamLo: Word;
ParamHi: Byte);
end;
IntRec3 = packed record
ID: ShortString;
case Boolean of
True: (
Param: Integer);
False: (
ParamLo: Word;
ParamHi: Byte);
end;
1、以上Param和ParamLo/ParamHi是变体结构的两个不同分支,可以用Param域直接访问该变体的整数部分(Integer),也可以用ParamLo域访问该整数部分的低16位(Word),用ParamH域i访问高8位(Byte)。
2、变体结构的大小,取决于占空间最大的分支,如本题中Integer(4字节)>Word(2字节)+Byte(1字节),因此本题三个变体结构大小均为256+4=260字节。
3、case后面的类型与分支标识的类型保持一致就行了,分支标识随便写什么都行(Integer与3、5,Char与'c'、'e',Boolean与True、False)。以上三种声明方法都声明的同一种类型。
4、为了能精确访问变体结构的域,一般要加packed关键字,防止编译器自动对齐。
5、变体结构在日常编程中用的不多,它大量使用在对Windows API的翻译中。
展开全部
type BirthOrAge=(BirthFlag, AgeFlag);
PersonType=record
id:
string[18];
name: string[50];
gender: (male, female);
case flag:
BirthOrAge of
BirthFlag: (birthday: longint);
AgeFlag: (age:
0..150);
end;
// birthday 和 Age 是重叠的,既可表示 生日,也可表示年龄。(二取一)
PersonType=record
id:
string[18];
name: string[50];
gender: (male, female);
case flag:
BirthOrAge of
BirthFlag: (birthday: longint);
AgeFlag: (age:
0..150);
end;
// birthday 和 Age 是重叠的,既可表示 生日,也可表示年龄。(二取一)
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
type node=record
case a:char of
'b':(b:integer);
'c':(c:integer);
end;
case a:char of
'b':(b:integer);
'c':(c:integer);
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询