亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> C语言

精通C语言结构体:定义、变量、访问与进阶示例

精通C语言结构体

通过清晰示例和最佳实践,学习如何定义、创建和使用C语言结构体。

什么是C语言结构体?

struct(结构体简称)是一种复合数据类型,将不同类型的变量归组在一个名称下。它是C语言创建复杂数据结构的基础。


定义结构体

创建结构体变量前必须先定义类型。struct 关键字引入定义:

struct structureName {
    dataType member1;
    dataType member2;
    … 
};

示例:

struct Person {
    char name[50];
    int citNo;
    float salary;
};

这创建了名为 struct Person 的新类型,现可声明该类型变量。


创建结构体变量

定义结构体类型不分配内存。使用时需声明变量:

struct Person {
    // 成员
};
int main() {
    struct Person person1, person2, p[20];
    return 0;
}

也可合并定义和变量声明:

struct Person {
    // 成员
} person1, person2, p[20];

访问结构体成员

两个运算符访问成员:

  1. . – 成员访问运算符。
  2. -> – 指向结构体指针的成员运算符(另见教程)。

读写 person2 的 salary:

person2.salary

示例 1:在C中使用结构体

#include <stdio.h>
#include <string.h>
struct Person {
    char name[50];
    int citNo;
    float salary;
} person1;
int main() {
    strcpy(person1.name, "George Orwell");
    person1.citNo = 1984;
    person1.salary = 2500;
    printf("Name: %s\n", person1.name);
    printf("Citizenship No.: %d\n", person1.citNo);
    printf("Salary: %.2f", person1.salary);
    return 0;
}

输出

Name: George Orwell
Citizenship No.: 1984
Salary: 2500.00

注意 strcpy() 将字符串复制到固定大小 char 数组,因数组不能直接用赋值运算符。


结构体配合 typedef 使用

typedef 为类型创建别名,简化声明:

typedef struct Distance {
    int feet;
    float inch;
} distances;
int main() {
    distances d1, d2;
}

无 typedef 时需写:

struct Distance d1, d2;

示例 2:别名实战

#include <stdio.h>
#include <string.h>
typedef struct Person {
    char name[50];
    int citNo;
    float salary;
} person;
int main() {
    person p1;
    strcpy(p1.name, "George Orwell");
    p1.citNo = 1984;
    p1.salary = 2500;
    printf("Name: %s\n", p1.name);
    printf("Citizenship No.: %d\n", p1.citNo);
    printf("Salary: %.2f", p1.salary);
    return 0;
}

输出

Name: George Orwell
Citizenship No.: 1984
Salary: 2500.00

嵌套结构体

结构体可包含其他结构体,实现层级数据建模:

struct complex {
    int imag;
    float real;
};
struct number {
    struct complex comp;
    int integers;
} num1, num2;

将 num2 的 imag 设为 11:

num2.comp.imag = 11;

示例 3:嵌套结构体实战

#include <stdio.h>
struct complex {
    int imag;
    float real;
};
struct number {
    struct complex comp;
    int integer;
} num1;
int main() {
    num1.comp.imag = 11;
    num1.comp.real = 5.25;
    num1.integer = 6;
    printf("Imaginary Part: %d\n", num1.comp.imag);
    printf("Real Part: %.2f\n", num1.comp.real);
    printf("Integer: %d", num1.integer);
    return 0;
}

输出

Imaginary Part: 11
Real Part: 5.25
Integer: 6

为何在C中使用结构体?

假设需存储姓名、公民编号和薪水。无结构体时,每人需为每字段创建单独变量,迅速导致代码重复混乱。结构体将相关数据封装为单一逻辑单元,提升代码清晰度和可维护性。


后续学习

C语言

  1. C# Hello World — 构建你的第一个C#应用程序
  2. C#关键字与标识符:规则、完整列表与最佳实践
  3. 精通C#变量与基础数据类型:完整指南
  4. C#运算符——C#运算符全面指南
  5. 掌握 C# 位运算与移位运算符:全面指南
  6. C# 基础:输入输出核心技巧完全指南
  7. C# 表达式、语句与代码块:全面指南与实战示例
  8. 掌握 C# 注释:类型、最佳实践与 XML 文档注释
  9. 掌握 C# switch 语句:语法、示例与最佳实践
  10. C# 三元运算符:条件表达式简明指南
  11. C# break 语句:用法、时机与实战示例
  12. 掌握 C# continue 语句:高效跳过循环迭代的实战指南