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語言的標準和編譯器的實現並不是完全統一,為了可移植性,...