我知道这可能是一个基本问题。
我有一个任务要求我了解 C 中的指定初始化程序是什么以及用一个初始化变量意味着什么。
我不熟悉这个术语,也找不到任何确凿的定义。
什么是 C 中的指定初始化程序?
我知道这可能是一个基本问题。
我有一个任务要求我了解 C 中的指定初始化程序是什么以及用一个初始化变量意味着什么。
我不熟悉这个术语,也找不到任何确凿的定义。
什么是 C 中的指定初始化程序?
指定初始化程序有两种形式:
1) 它提供了一种初始化数组中特定元素的快速方法:
int foo[10] = { [3] = 1, [5] = 2 };
会将所有元素设置foo
为 0,除了将设置为 1 的索引 3 和将设置为 2 的索引 5。
2) 它提供了一种显式初始化struct
成员的方法。例如,对于
struct Foo { int a, b; };
你可以写
struct Foo foo { .a = 1, .b = 2 };
请注意,在这种情况下,未显式初始化的成员将被初始化,就好像实例具有static
持续时间一样。
设计的初始化程序自 ISO C99 以来出现,它是一种不同且更动态的方式,用于在初始化时在 C 中进行初始化struct
,union
或在array
.
与标准初始化的最大区别是您不必按固定顺序声明元素,也可以省略元素。
来自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 };