簡體   English   中英

什么是 C 中的指定初始化程序?

[英]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持續時間一樣。


兩者都是標准 C,但請注意 C++ 不支持任何一種(因為構造函數可以使用該語言完成工作。)

設計的初始化程序自 ISO C99 開始出現,是在初始化structunionarray時在 C 中初始化的一種不同且更動態的方式。

與標准初始化的最大區別是您不必按固定順序聲明元素,也可以省略元素。

來自GNU 指南

標准 C90 要求初始值設定項的元素以固定順序出現,與被初始化的數組或結構中元素的順序相同。

在 ISO C99 中,您可以按隨機順序給出元素,指定它們適用的數組索引或結構字段名稱,GNU C 也允許將其作為 C90 模式的擴展


例子

1.數組索引

標准初始化

  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 };

2.結構或聯合:

標准初始化

struct point { int x, y; };

設計初始化

 struct point p = { .y = 2, .x = 3 }; or
 struct point p = { y: 2, x: 3 };

3.將命名元素與連續元素的普通C初始化結合起來:

標准初始化

int a[6] = { 0, v1, v2, 0, v4, 0 };

設計初始化

int a[6] = { [1] = v1, v2, [4] = v4 };

4. 其他:

標記數組初始值設定項的元素

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM