pascal程式語言中宣告record型別中的case用法,多謝

時間 2021-10-30 06:22:45

1樓:匿名使用者

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 是重疊的,既可表示 生日,也可表示年齡。(二取一)

2樓:匿名使用者

很簡單,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的翻譯中。

3樓:

type node=record

case a:char of

'b':(b:integer);

'c':(c:integer);

end;

c語言中byte怎麼宣告,c語言中的byte和word是什麼資料型別

3全部標準c沒有這個型別,byte表示乙個位元組,對應c的unsigned char,你可以自己按下面的樣子定義乙個即可 typedef unsigned char byte 位元組 byte bait n.c 是計算機資訊技術用於計量儲存容量的一種計量單位,也表示一些計算機程式語言中的資料型別和語...

VHDL語言中,SXT是什麼意思?格式如 RegBSXT

sxt函式用來擴充套件乙個訊號的位寬。比方說你的rega有五位 如10011 width 10,那麼regb sxt rega,width 執行完之後regb的末五位就和rega相同,高五位都是rega最高位 也就是符號位 的值,即regb 1111110011。我記得是位擴充套件,一種是有符號擴充...

c語言中不能在函式裡面宣告函式嗎

迷路的國王 你這個問題看似簡單,其實涉及到了函式的宣告與定義,以及c語言的標準規範和具體編譯器的實現問題。從標準規範來看 c語言允許函式裡宣告函式,但是不建議這麼寫,因為不利於多文件的組織。c語言禁止函式裡定義函式,但是個別編譯器卻沒遵循標準。c語言的標準和編譯器的實現並不是完全統一,為了可移植性,...