另类结构体初始化
有一结构体如下:
struct Test
{
int a;
int b;
};
定义该结构体的变量并赋初值a=1,b=2;
Test t1={1,2};
假设后来结构体更改为
struct Test
{
int a;
int c;
int b;
};
那么上面的结构体变量初始化的值就不正确了,本是想让a=1,b=2,现在改变成了a=1,b=0,c=2,
问题是有什么语法可以在结构体初始化时指定要初始化的成员名啊
如Test t1={a:1,b:2};当然这肯定不对了,有没类似的语法呢?
[解决办法]
似乎只能按照变量声明的顺序赋值的
应该是只能Test a={1,0,2};这样赋值的
[解决办法]
给Test增加构造函数即可。
[解决办法]
C99 有这个语法
[解决办法]
直接赋值
test t1;
t1.a=1;
t1.b=2;
[解决办法]
编程技巧: 指定元素初始化
DESIGNATED INITIALIZERS
在 C99 中另一个新的特性称之为指定性初始化. 指定性初始化使你能够初始化特定的数组元素而无需初始化整个数组. 假设你有一个具备5个元素地数组, 而你需要仅仅初始化第2,4个元素, 并且将其他元素保持未初始化. 在 C++ 和 C89, 你不能这样做. 但是, C99 定义如下句法构造:
int arr[5]={[1]=10,[3]=20}; /*designated initializers*/
元素 arr[1] 和 arr[3] 初始化为 10 和 20, 其他元素保留未初始化状态. 该特性对于维护稀疏数组十分有用.
C99 也定义了用于进行结构和联合指定初始化的格式:
struct Person
{
char name[20];
int ID;
int age;
FILE *record;
};
Person p = {.ID=0, .record=NULL};
这个例子里面, 元素 name 和 age 没有被初始化. 记住, 指定性初始化只在 C99 提供支持.然而, 因为和很多 C++ 编译器也是 C 编译器, C++ 编译器也许也添加了该新特性作为一种非标准扩展.
[解决办法]
所以,
使用支持 C99 标准的编译器,
如Dev C++,
使用语法:
Test t1={.a=1, .b=2}; //OK