结构体:

在C语言中,*结构体(struct)*指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。结构体同时也是一些元素的集合,这些元素称为结构体的成员(member),且这些成员可以为不同的类型,成员一般用名字访问。


结构体定义

结构体:将不同类型的数据封装成一种组合型的数据结构。
例如:

1
2
3
4
5
struct stu
{
int id;
char name[21];
};

结构体变量

在定义结构体体时可以同时对结构体变量定义以及赋值:

  • 只定义结构体:

    1
    2
    3
    4
    5
    struct stu
    {
    int id;
    char name[21];
    };
  • 定义结构体后定义变量

    1
    2
    3
    4
    5
    6
    struct stu //开始定义结构体
    {
    int id;
    char name[21];
    };//结构体定义结束
    struct stu boy1;//定义结构体变量
  • 结构体定义时同时定义结构体变量

    1
    2
    3
    4
    5
    struct stu //开始定义结构体
    {
    int id;
    char name[21];
    }boy1;//结构体定义结束

结构体变量成员引用

结构体变量引用使用 . (结构体成员运算符)在所有运算符中优先级最高。
例如:

1
2
boy1.id //学号
boy1.name //姓名

结构体变量的初始化

结构体变量初始化可以在定义时初始化,亦可以对结构体变量的单个成员进行赋值。

  1. 定义结构体变量同时进行初始化
    1
    2
    3
    4
    5
    struct stu //开始定义结构体
    {
    int id;
    char name[21];
    }boy1={1,"xiaoming"};//结构体定义结束
    或者是
    1
    2
    3
    4
    5
    6
    struct stu //开始定义结构体
    {
    int id;
    char name[21];
    };//结构体定义结束
    struct stu boy1={1,"xiaoming"};//结构体定义结束
  2. 对结构体变量成员赋值
    1
    2
    3
    4
    5
    6
    7
    8
    struct stu //开始定义结构体
    {
    int id;
    char name[21];
    };//结构体定义结束
    struct stu boy1;//结构体定义结束
    boy1.id=1;
    strcpy(boy1.name,"xiaoming");
  3. 对于相同类型的结构体,变量之间可以直接赋值
    1
    2
    3
    4
    5
    6
    struct stu //开始定义结构体
    {
    int id;
    char name[21];
    }boy1={1,"xiaoming"},boy2;//结构体定义结束
    boy2=boy1;

结构体数组

定义:

1
2
3
4
5
struct stu //开始定义结构体
{
int id;
char name[21];
}boy[30];//结构体定义结束

使用方法和数组变量方法类似


结构体指针

  1. 指向结构体变量的指针:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    struct stu //开始定义结构体
    {
    int id;
    char name[21];
    }boy1={1,"xiaoming"};//结构体定义结束
    struct stu *p;//定义指向结构体变量的指针
    p=&boy1;//指向结构体变量
    printf("%s\n",(*p).name);//通过指针访问结构体变量成员
    ```c
    访问结构体变量成员的语句是:
    ```c
    (*p).name
    注意p两边的括号不可少,因为.的优先级大于,如果不加括号就成了*(p.name)。这是错误的!

或者是

1
p->name