中国龙芯CDX 发表于 2025-10-15 13:50

C语言结构体的使用

有时候需要将不同类型的数据组合为一个整体,以便于引用。例如,一名学生有学号、姓名、性别、年龄等属性,如果针对每个属性都单独定义一个变量,那么当有多名学生时变量就难以分清。结构体就是用来管理不同类型的数据组合。

结构体的声明与定义
结构体的声明一般形式为:

c
struct 结构体名{
    成员1;
    成员2;
    ...
}; //注意分号
例如:

c
struct student{
    int num;
    char name;
    char gender;
    int age;
};
结构体定义:

c
//struct 结构体名 变量名
struct student s;
结构体的初始化只能在定义时进行:

c
struct student s={100,"John",'M',20}; //定义并初始化
如果已经定义了结构体,就不能再初始化了,只能对它的每个成员单独赋值,如s.num=1;

中国龙芯CDX 发表于 2025-10-15 13:52

结构体成员的访问
采用“结构体变量名.成员名”的形式来访问结构体成员。

c
#include <stdio.h>
//工作中往往把结构体声明放在头文件中
struct student{
    int num;
    char name;
    char gender;
    int age;
};

int main() {
    struct student s={100,"John",'M',20}; //定义并初始化
    struct student sarr; //结构体数组
    s.age = 21;
    printf("%d %s %c %d\n",s.num,s.name,s.gender,s.age);
    printf("---------------------\n");
    for (int i = 0; i < 3; ++i) {
      scanf("%d%s %c%d",&sarr.num,sarr.name,
            &sarr.gender,&sarr.age);
    }
    for (int i = 0; i < 3; ++i) {
      printf("%d %s %c %d\n",sarr.num,sarr.name,
               sarr.gender,sarr.age);
    }
    return 0;
}
执行结果:


中国龙芯CDX 发表于 2025-10-15 13:53

结构体指针
一个结构体变量的指针就是该变量所占据内存段的起始地址。
结构体指针的使用:

c
#include <stdio.h>

struct student{
    int num;
    char name;
    char gender;
    int age;
};

int main() {
    struct student sarr={1,"KK",'F',18,
            2,"HH",'M',20,
            3,"LL",'M',19};
    struct student *p; //定义结构体指针
    p=sarr;
    //获取成员方法一,成员运算符优先级高于取值运算符,所以要加括号(*p).num
    printf("%d %s %c %d\n",(*p).num,(*p).name,(*p).gender,(*p).age);
    //获取成员方法二,更为常用的方法
    printf("%d %s %c %d\n",p->num,p->name,p->gender,p->age);
    printf("---------------\n");
    p=p+1;
    printf("%d %s %c %d\n",p->num,p->name,p->gender,p->age);
    return 0;
}
执行结果:

中国龙芯CDX 发表于 2025-10-15 13:56

结构体对齐
结构体对齐是为了cpu高效存取内存上的数据。
先运行以下程序观察结构体的大小:

c
#include <stdio.h>

typedef struct A {
    int a;
    char b;
    short c;
}A;

typedef struct B {
    char a;
    int b;
    short c;
}B;

int main() {
    A a;
    B b;
    printf("A size is %d\n",sizeof(a));
    printf("B size is %d\n",sizeof(b));
    return 0;
}
执行结果:



OKAKAKO 发表于 2025-10-19 22:53

结构体对齐是为了cpu高效存取内存上的数据。

AdaMaYun 发表于 2025-10-23 22:13

已经定义了结构体,就不能再初始化了
页: [1]
查看完整版本: C语言结构体的使用