Menu
CoddyTech

初始化结构体

本课属于 Coddy C 学习旅程的“逻辑与流程”单元。第 42 课,共 63 课。

虽然你可以创建 struct 变量,然后逐个为其成员赋值,但 C 提供了一种更方便的设置初始值的方法。你可以在声明 struct 变量时,使用花括号括起来的初始化列表来初始化它。

结构体初始化的语法是:

struct StructureName variableName = {value1, value2, ...};

以我们的 Point 结构体为例,你可以用一行简洁的代码声明并初始化它:

struct Point p1 = {10, 20};

这会创建一个名为 p1 的 Point 变量,其中 x 设置为 10,y 设置为 20。初始化列表中的值会按结构体定义中成员的声明顺序赋给结构体成员。

这种初始化方式不仅比单独赋值更简洁,还能确保结构体一开始就包含有意义的值,而不是随机的垃圾数据。如果你在编译时就知道初始值,并希望高效地创建可直接使用的结构体变量,这种方式会特别有用。

challenge icon

挑战

简单

编写一个 C 程序,演示如何使用初始化列表初始化 struct。你的程序应当:

  1. 定义一个名为 Employee 的 struct,包含以下成员:
    • 一个整数 id,用于存储员工 ID
    • 一个大小为 15 的字符数组 department,用于存储部门名称
    • 一个整数 yearsOfService,用于存储服务年限
    • 一个浮点数 salary,用于存储员工薪水
  2. 使用初始化列表创建 3 个 Employee 变量,数据如下:
    • emp1:ID 为 101,部门为 "Engineering",服务年限为 5 年,薪水为 75000.50
    • emp2:ID 为 102,部门为 "Marketing",服务年限为 3 年,薪水为 65000.25
    • emp3:ID 为 103,部门为 "Sales",服务年限为 8 年,薪水为 80000.75
  3. 按照以下确切格式打印每位员工的信息:
    • Employee 1:
    • ID: [id]
    • Department: [department]
    • Years of Service: [yearsOfService]
    • Salary: [salary]
    • Employee 2:
    • ID: [id]
    • Department: [department]
    • Years of Service: [yearsOfService]
    • Salary: [salary]
    • Employee 3:
    • ID: [id]
    • Department: [department]
    • Years of Service: [yearsOfService]
    • Salary: [salary]
  4. 计算并打印 3 位员工的薪水总和,格式为:Total Salary: [total]
  5. 计算并打印平均服务年限,格式为:Average Years of Service: [average]

这个挑战将检验你对使用初始化列表初始化 struct 的理解。使用这种方式时,你可以在同一行声明并初始化 struct 变量。初始化列表中的值必须与 struct 定义中成员的声明顺序一致。

预期输出如下:

Employee 1:
ID: 101
Department: Engineering
Years of Service: 5
Salary: 75000.50
Employee 2:
ID: 102
Department: Marketing
Years of Service: 3
Salary: 65000.25
Employee 3:
ID: 103
Department: Sales
Years of Service: 8
Salary: 80000.75
Total Salary: 220001.50
Average Years of Service: 5.33

亲手试试

#include <stdio.h>

// TODO:在这里定义 Employee 结构体

int main() {
    // TODO:使用初始化列表创建 3 个 Employee 变量
    
    // TODO:打印每位员工的信息
    
    // TODO:计算并打印工资总额和平均工龄
    
    return 0;
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C 在线编译器