C语言结构体怎么写

来源:站长查询作者:星宫一花头衔:网络博主
导读:本期聚焦于小伙伴创作的《C语言结构体怎么写》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C语言结构体怎么写》有用,将其分享出去将是对创作者最好的鼓励。

C语言结构体是一种用户自定义的复合数据类型,允许将不同类型的数据组合成一个整体,方便对一组相关联的数据进行统一管理,比如可以用结构体来表示一个学生的基本信息,包含姓名、年龄、成绩等不同字段。

C语言结构体的基本定义语法

定义结构体需要使用struct关键字,基本语法格式如下:

struct 结构体名 {
    数据类型 成员1;
    数据类型 成员2;
    // 更多成员
};

比如我们要定义一个表示学生信息的结构体,代码如下:

struct Student {
    char name[20];  // 学生姓名
    int age;        // 学生年龄
    float score;    // 学生成绩
};

这里定义了一个名为Student的结构体,包含三个成员,分别是字符数组类型的姓名、整型的年龄和浮点型的成绩。

结构体变量的定义方式

定义好结构体类型之后,就可以创建对应的结构体变量,常见的有两种方式:

1. 先定义结构体类型,再定义变量

这种方式是先完成结构体的类型定义,之后再用类型名创建变量:

struct Student {
    char name[20];
    int age;
    float score;
};

// 定义两个Student类型的结构体变量
struct Student stu1;
struct Student stu2;

2. 定义结构体类型的同时定义变量

也可以在定义结构体的大括号后面直接跟上变量名,创建对应的变量:

struct Student {
    char name[20];
    int age;
    float score;
} stu1, stu2;  // 同时定义stu1和stu2两个变量

结构体变量的初始化方法

结构体变量可以在定义的时候进行初始化,常见的初始化方式有以下几种:

1. 按顺序初始化

按照结构体成员的定义顺序,依次给每个成员赋值:

struct Student {
    char name[20];
    int age;
    float score;
};

// 按顺序初始化,name对应第一个成员,age对应第二个,score对应第三个
struct Student stu1 = {"张三", 18, 92.5};

2. 指定成员初始化

C99标准支持指定成员初始化,不需要按照顺序,直接指定成员名赋值即可:

struct Student {
    char name[20];
    int age;
    float score;
};

// 指定成员初始化,顺序可以打乱
struct Student stu2 = {.score = 88.0, .name = "李四", .age = 19};

结构体成员的访问方式

访问结构体成员需要使用点运算符.,语法格式为结构体变量名.成员名,下面是完整的访问示例:

#include <stdio.h>
#include <string.h>

struct Student {
    char name[20];
    int age;
    float score;
};

int main() {
    // 定义并初始化结构体变量
    struct Student stu = {"王五", 20, 95.0};
    
    // 访问结构体成员并输出
    printf("姓名:%sn", stu.name);
    printf("年龄:%dn", stu.age);
    printf("成绩:%.1fn", stu.score);
    
    // 修改结构体成员的值
    strcpy(stu.name, "赵六");
    stu.age = 21;
    stu.score = 96.5;
    
    printf("修改后姓名:%sn", stu.name);
    printf("修改后年龄:%dn", stu.age);
    printf("修改后成绩:%.1fn", stu.score);
    
    return 0;
}

结构体指针的使用

如果是指向结构体的指针变量,访问成员需要使用箭头运算符->,示例如下:

#include <stdio.h>

struct Student {
    char name[20];
    int age;
    float score;
};

int main() {
    struct Student stu = {"孙七", 22, 90.0};
    // 定义结构体指针并指向stu
    struct Student *p = &stu;
    
    // 通过指针访问结构体成员
    printf("姓名:%sn", p->name);
    printf("年龄:%dn", p->age);
    printf("成绩:%.1fn", p->score);
    
    return 0;
}

结构体类型重命名

可以使用typedef关键字给结构体类型起一个别名,之后定义变量的时候就不需要再写struct关键字了:

#include <stdio.h>

// 给struct Student起别名为Student
typedef struct Student {
    char name[20];
    int age;
    float score;
} Student;

int main() {
    // 直接用别名定义变量,不需要加struct
    Student stu = {"周八", 23, 89.0};
    printf("姓名:%s,年龄:%d,成绩:%.1fn", stu.name, stu.age, stu.score);
    return 0;
}

C语言结构体struct结构体初始化修改时间:2026-06-14 13:06:32

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。