面试题答案
一键面试- 传统初始化方式
#include <stdio.h>
// 定义结构体
struct MyStruct {
int intValue;
char charValue;
float floatValue;
};
int main() {
// 传统初始化
struct MyStruct myStruct1;
myStruct1.intValue = 10;
myStruct1.charValue = 'A';
myStruct1.floatValue = 3.14f;
printf("传统初始化: intValue = %d, charValue = %c, floatValue = %f\n", myStruct1.intValue, myStruct1.charValue, myStruct1.floatValue);
return 0;
}
适用场景:当需要逐步对结构体成员进行赋值,并且可能根据不同条件或逻辑分步设置成员值时,这种方式比较灵活。比如在一个函数内部,根据函数执行过程中的不同情况为结构体成员赋值。
- 初始化列表方式
#include <stdio.h>
// 定义结构体
struct MyStruct {
int intValue;
char charValue;
float floatValue;
};
int main() {
// 初始化列表方式
struct MyStruct myStruct2 = {20, 'B', 2.718f};
printf("初始化列表方式: intValue = %d, charValue = %c, floatValue = %f\n", myStruct2.intValue, myStruct2.charValue, myStruct2.floatValue);
return 0;
}
适用场景:当结构体创建时就已知所有成员的初始值,并且希望简洁地一次性完成初始化时,使用初始化列表非常方便。比如在定义全局结构体变量,或者在函数内定义一个结构体变量且其初始值固定时。
- 指定初始化器方式(C99 及以上)
#include <stdio.h>
// 定义结构体
struct MyStruct {
int intValue;
char charValue;
float floatValue;
};
int main() {
// 指定初始化器方式
struct MyStruct myStruct3 = {.intValue = 30, .floatValue = 1.618f, .charValue = 'C'};
printf("指定初始化器方式: intValue = %d, charValue = %c, floatValue = %f\n", myStruct3.intValue, myStruct3.charValue, myStruct3.floatValue);
return 0;
}
适用场景:当只想初始化结构体中的部分成员,或者成员初始化顺序与结构体定义顺序不一致时,指定初始化器非常有用。比如在结构体有较多成员,但只需要设置其中几个特定成员的值时。