[英]What is a designated initializer in C?
我有一個作業,要求我了解 C 中的指定初始化程序,以及用一個初始化變量意味着什么。
我不熟悉這個術語,也找不到任何確鑿的定義。
什么是 C 中的指定初始化程序?
指定初始化程序有兩種形式:
1) 它提供了一種初始化數組中特定元素的快速方法:
int foo[10] = { [3] = 1, [5] = 2 };
會將所有元素foo
設置為 0,除了索引 3 將設置為 1 和索引 5 將設置為 2。
2) 它提供了一種顯式初始化struct
成員的方法。 例如,對於
struct Foo { int a, b; };
你可以寫
struct Foo foo { .a = 1, .b = 2 };
請注意,在這種情況下,未顯式初始化的成員將被初始化,就好像實例具有static
持續時間一樣。
設計的初始化程序自 ISO C99 開始出現,是在初始化struct
、 union
或array
時在 C 中初始化的一種不同且更動態的方式。
與標准初始化的最大區別是您不必按固定順序聲明元素,也可以省略元素。
來自GNU 指南:
標准 C90 要求初始值設定項的元素以固定順序出現,與被初始化的數組或結構中元素的順序相同。
在 ISO C99 中,您可以按隨機順序給出元素,指定它們適用的數組索引或結構字段名稱,GNU C 也允許將其作為 C90 模式的擴展
標准初始化
int a[6] = { 0, 0, 15, 0, 29, 0 };
設計初始化
int a[6] = {[4] = 29, [2] = 15 }; // or
int a[6] = {[4]29 , [2]15 }; // or
int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };
標准初始化
struct point { int x, y; };
設計初始化
struct point p = { .y = 2, .x = 3 }; or
struct point p = { y: 2, x: 3 };
標准初始化
int a[6] = { 0, v1, v2, 0, v4, 0 };
設計初始化
int a[6] = { [1] = v1, v2, [4] = v4 };
標記數組初始值設定項的元素
int whitespace[256] = { [' '] = 1, ['\t'] = 1, ['\h'] = 1,
['\f'] = 1, ['\n'] = 1, ['\r'] = 1 };
在“=”之前編寫一系列“.fieldname”和“[index]”指示符以指定要初始化的嵌套子對象
struct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.