陣列的指定初始化——ada
應用例項之九
一帖子詢問如何理解下面的
c程式:
fefrm event[ ] = ,
[c_cmd_set_fac_m] = ,
[...]=
};c_cmd_set_power_
、c_cmd_set_fac_m
、fac_cmd_set_p
等都是如下定義的列舉值。
typedef enum
comm_cmd_func_code;
typedef enum
factory_cmd;
上述程式應用了
iso c99
標準的乙個特色,即指定初始化(
designated initializer
)。c99
允許通過指定索引或結構網域名稱,使初始化值以任意順序出現。指定陣列索引的方法是在初始化值前寫
'[index] ='
,要指定乙個範圍使用
'[first ... last] ='
的形式。
例如:int a[6] = ;
這相當於:
int a[6] = ;
如果假定
fefrm
是如下的結構型別:
typedef struct
fefrm;
那麼帖子中的例子就是乙個通過指定陣列索引來給出初值的結構陣列。
ada語言提供了類似的機制,稱為指名的聚合(
named aggregate
)。在ada
程式中,可通過指名的聚合來對陣列賦初值,即在初值前面增加下標值和符號
=〉,使初值賦給指定的陣列分量。例如:
type vector is array (integer range <>) of float;
v: vector(1 .. 5) := (3 .. 5 => 1.0, 6 | 7 => 2.0);-- [1]
v := (3=> 1.0, 4=> 1.0, 5 => 1.0, others => 2.0); -- [2]
v := (3 .. 5 => 1.0, others => 2.0); -- [3]
在上例[1]
中,v(1)=v(2)=v(3)=1.0
,v(4)=v(5)=2.0
。在上例
[2]和
[3]中,
v(3)=v(4)=v(5)=1.0
,v(1)=v(2)=2.0
。以下是乙個
2維陣列的例子:
type matrix (integer range <>, integer range <>) of float;
m: matrix(1..3, 0..2) :=
((1.0, 2.0, 1.0), (2=>1.0, 1=>0.5, 0=>0.0), (others => 0.0));
指名的聚合對陣列(尤其是大型陣列)的初始化提供了便利,同時也減少了出錯的機會。
初始化 指定初始化
id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...
陣列指定初始化器
c99增加了乙個新特性 指定初始化器。利用該特性可以初始化指定的陣列元素。例如,只初始化陣列中的最後乙個元素。對於傳統的的c初始化語法,必須初始化最有乙個元素之前的所有與還俗,才能初始化它 int arr 6 這樣寫和上面的結果是一樣的,由於前幾個元素沒有初始化,所以編譯器會自動把它們設定為0。in...
結構體初始化 指定初始化
參考 c99支援結構的指定初始化專案,其語法與陣列的指定初始化專案近似。只是,結構的指定初始化專案使用點運算子和成員名 而不是方括號和索引值 來標識具體的元素。例如,只初始化book結構的成員value,可以這樣做 struct book surprise 可以按照任意的順序使用指定初始化專案 st...