C语言---结构体

1. 什么是结构体?

结构体是一种自定义的数据类型,可以用来存储不同类型的变量。它允许我们将不同类型的数据组合在一起,以便于管理和操作。结构体可以包含多个成员变量,每个成员变量可以是任意数据类型。

2. 结构体的定义

我们可以使用struct关键字定义结构体。结构体定义包括结构体名称和结构体成员变量。结构体定义通常放在函数外部,以便在程序中的任何位置都能使用它。

示例代码:

// 结构体定义
struct Person
{
    char name[20];
    int age;
    float height;
};

3. 结构体的声明和初始化

定义结构体后,我们可以通过声明结构体变量来实例化它。声明结构体变量时,需要使用struct关键字及结构体名称。

示例代码:

struct Person person1;  // 声明结构体变量
person1.age = 20;       // 初始化结构体成员变量
//另一种初始化方式↓
struct Person person1 = {"John", 18, 1.75};

4. 结构体成员的访问

我们可以使用.操作符来访问结构体变量的成员。通过结构体变量和成员变量名的组合,我们可以读取或修改结构体的成员数据。

示例代码:

printf("Name: %s\n", person1.name);  // 读取结构体成员
person1.height = 1.75;               // 修改结构体成员

5. 结构体作为函数参数传递

我们可以将结构体作为参数传递给函数,在函数内部操作结构体成员变量,以实现对结构体的修改和处理。

示例代码:

void printPersonInfo(struct Person p) 
{
    printf("Name: %s\n", p.name);
    printf("Age: %d\n", p.age);
    printf("Height: %.2f\n", p.height);
}

// 调用函数,传递结构体作为参数
printPersonInfo(person1);

6. 结构体数组

我们可以创建结构体数组,即在数组中存储多个结构体变量。通过循环遍历结构体数组,我们可以对每个结构体元素进行访问和处理。

示例代码:

struct Person persons[3];  // 声明结构体数组

// 循环遍历结构体数组
for (int i = 0; i < 3; i++) 
{
    printf("Person %d:\n", i+1);
    scanf("%s", &persons[i].name);
    scanf("%d", &persons[i].age);
    scanf("%f", &persons[i].height);
}

7. 结构体指针:

结构体指针是指向结构体变量的指针,它可以用于访问结构体成员变量,并且可以通过指针修改结构体的值。结构体指针与一般指针使用相同的操作符*->

示例代码:

struct Person 
{
    char name[20];
    int age;
    float height;
};

struct Person person1;
struct Person *p;   // 声明结构体指针

p = &person1;       // 将结构体变量的地址赋给结构体指针

(*p).age = 20;      // 使用指针访问和修改结构体成员
p->height = 1.75;   // 使用指针访问和修改结构体成员

8. 嵌套结构体:

嵌套结构体是指在结构体中使用其他结构体作为其成员变量。这种方式可以组合不同的结构体,形成更复杂的数据结构。通过嵌套结构体,我们可以使用操作符.->访问和操作内部结构体的成员变量。

示例代码:

struct Date {
    int day;
    int month;
    int year;
};

struct Person {
    char name[20];
    struct Date birthdate;   // 嵌套结构体作为成员变量
    float height;
};

struct Person person1;

person1.birthdate.day = 25;     // 访问嵌套结构体的成员
person1.birthdate.month = 3;
person1.birthdate.year = 1990;

printf("Birthdate: %d/%d/%d\n", person1.birthdate.day,
        person1.birthdate.month, person1.birthdate.year);
  • 17
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值