use*_*461 10 c initializer designated-initializer
我知道这可能是一个基本问题.
我有一个任务,要求我理解c中的指定初始化器是什么以及用一个初始化变量意味着什么.我不熟悉这个词,也找不到任何结论性的定义.
我一直在寻找不同地方的答案,但找不到任何答案.谢谢您的帮助!
Fed*_*Baù 22
\n
指定初始化器自 ISO C99 以来就出现了,它是一种不同的、更动态的方式,用于在初始化时用 C 进行初始化struct,union或者array.
与标准初始化的最大区别在于,您不必以固定顺序声明元素,并且还可以省略 element。
\n来自GNU 指南:
\n\n\n标准 C90 要求初始化器的元素以固定顺序出现,与正在初始化的数组或结构中的元素的顺序相同。
\n
\n\n在 ISO C99 中,您可以按随机顺序给出元素,指定它们适用的数组索引或结构字段名称,GNU C 也允许将其作为 C90 模式的扩展
\n
标准初始化
\n int a[6] = { 0, 0, 15, 0, 29, 0 };\nRun Code Online (Sandbox Code Playgroud)\n指定初始化
\n int a[6] = {[4] = 29, [2] = 15 }; // or\n int a[6] = {[4]29 , [2]15 }; // or\n int widths[] = { [0 ... 9] = 1, [10 ... 99] = 2, [100] = 3 };\nRun Code Online (Sandbox Code Playgroud)\n标准初始化
\nstruct point { int x, y; };\nRun Code Online (Sandbox Code Playgroud)\n指定初始化
\n struct point p = { .y = 2, .x = 3 }; or\n struct point p = { y: 2, x: 3 };\nRun Code Online (Sandbox Code Playgroud)\n标准初始化
\nint a[6] = { 0, v1, v2, 0, v4, 0 };\nRun Code Online (Sandbox Code Playgroud)\n指定初始化
\nint a[6] = { [1] = v1, v2, [4] = v4 };\nRun Code Online (Sandbox Code Playgroud)\n标记数组初始值设定项的元素
\nint whitespace[256] = { [\' \'] = 1, [\'\\t\'] = 1, [\'\\h\'] = 1,\n [\'\\f\'] = 1, [\'\\n\'] = 1, [\'\\r\'] = 1 };\nRun Code Online (Sandbox Code Playgroud)\n在 \xe2\x80\x98=\xe2\x80\x99 之前写入一系列 \xe2\x80\x98.fieldname\xe2\x80\x99 和 \xe2\x80\x98[index]\xe2\x80\x99 指示符指定要初始化的嵌套子对象
\nstruct point ptarray[10] = { [2].y = yv2, [2].x = xv2, [0].x = xv0 };\nRun Code Online (Sandbox Code Playgroud)\nBat*_*eba 14
指定的初始化程序有两种形式:
1)它提供了一种初始化数组中特定元素的快速方法:
int foo[10] = { [3] = 1, [5] = 2 };
Run Code Online (Sandbox Code Playgroud)
将所有元素设置foo为0,除了索引3(将设置为1)和索引5(将设置为2).
2)它提供了一种明确初始化struct成员的方法.例如,对于
struct Foo { int a, b; };
Run Code Online (Sandbox Code Playgroud)
你可以写
struct Foo foo { .a = 1, .b = 2 };
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,未显式初始化的成员将被初始化,就像实例具有static持续时间一样.