什么是C中指定的初始值设定项?
我知道这可能是一个基本问题 我有一个赋值要求我理解C中指定的初始值设定项是什么,以及用一个初始化变量意味着什么 我不熟悉这个术语,也找不到任何结论性的定义什么是C中指定的初始值设定项?,c,struct,union,initializer,designated-initializer,C,Struct,Union,Initializer,Designated Initializer,我知道这可能是一个基本问题 我有一个赋值要求我理解C中指定的初始值设定项是什么,以及用一个初始化变量意味着什么 我不熟悉这个术语,也找不到任何结论性的定义 什么是C中的指定初始值设定项?指定初始值设定项有两种味道: 1) 它提供了一种快速初始化数组中特定元素的方法: int foo[10] = { [3] = 1, [5] = 2 }; 将所有元素设置为foo为0,索引3将设置为1,索引5将设置为2 2) 它提供了一种显式初始化struct成员的方法。比如说, struct Foo { int
什么是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
duration一样
两个都是标准C,但是注意C++也不支持(因为构造函数可以用那个语言来做。)< /P> < P>自从ISC99以来,设计的初始化器出现了,在初始化代码<结构> <代码>、<代码>联合< /COD>或<代码>数组 >时,初始化C是一种不同的、更动态的初始化方式。 与标准初始化的最大区别在于,不必按固定顺序声明元素,也可以省略元素 从: 标准C90要求初始值设定项的元素以固定顺序出现,与正在初始化的数组或结构中元素的顺序相同 在ISOC99中,您可以按随机顺序给出元素,指定它们所应用的数组索引或结构字段名,GNUC也允许将其作为C90模式的扩展
例子 1.数组索引 标准初始化
inta[6]={0,0,15,0,29,0};
设计初始化
inta[6]={[4]=29[2]=15};//或
int a[6]={[4]29[2]15};//或
整数宽度[]={[0…9]=1,[10…99]=2,[100]=3};
2.结构或联合:
标准初始化
结构点{intx,y;};
设计初始化
结构点p={.y=2.x=3};或
结构点p={y:2,x:3};
3.将命名元素与后续元素的普通C初始化相结合:
标准初始化
inta[6]={0,v1,v2,0,v4,0};
设计初始化
inta[6]={[1]=v1、v2、[4]=v4};
4.其他:
标记数组初始值设定项的元素
int空格[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};
向导