AutoLeaders控制组-结构体学习笔记

一、定义和使用结构体变量

1.1自己建立结构体类型

要自己建立结构体类型,首先需要定义一个结构体,然后在程序中使用这个结构体。以下是一个简单的示例:

#include <stdio.h>

// 定义结构体类型
typedef struct {
    int id;
    char name[20];
    float score;
} Student;

int main() {
    // 使用结构体类型创建变量
    Student stu1 = {1, "张三", 95.5};
    Student stu2 = {2, "李四", 88.0};

    // 输出结构体变量的值
    printf("学生1的ID: %d, 姓名: %s, 成绩: %.2f
", stu1.id, stu1.name, stu1.score);
    printf("学生2的ID: %d, 姓名: %s, 成绩: %.2f
", stu2.id, stu2.name, stu2.score);

    return 0;
}
 

在这个示例中,我们定义了一个名为 Student 的结构体类型,包含三个成员: id (整数类型)、 name (字符数组类型)和 score (浮点数类型)。然后我们在 main 函数中创建了两个 Student 类型的变量 stu1 和 stu2 ,并分别赋值。最后,我们使用 printf 函数输出这两个变量的值。

1.2定义结构体类型变量

为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。可以采取以下3种方法定义结构体类型变量。
1、先声明结构体类型,再定义该类型的变量
2、在声明类型的同时定义变量
3、不指定类型名而直接定义结构体类型变量

1.3结构体变量的初始化和引用

结构体变量的初始化可以通过以下几种方式:

1、直接赋值:将一个结构体类型的值赋给另一个结构体类型的变量。

#include <stdio.h>

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

int main() {
    Student stu1 = {1, "张三", 95.5};
    Student stu2 = {2, "李四", 88.0};

    printf("学生1的ID: %d, 姓名: %s, 成绩: %.2f
", stu1.id, stu1.name, stu1.score);
    printf("学生2的ID: %d, 姓名: %s, 成绩: %.2f
", stu2.id, stu2.name, stu2.score);

    return 0;
}

2、使用 memset 函数:将结构体类型的内存空间初始化为指定的值。

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

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

int main() {
    Student stu1;
    memset(&stu1, 0, sizeof(Student)); // 将结构体变量stu1的内存空间初始化为0

    strcpy(stu1.name, "张三");
    stu1.id = 1;
    stu1.score = 95.5;

    printf("学生1的ID: %d, 姓名: %s, 成绩: %.2f
", stu1.id, stu1.name, stu1.score);

    return 0;
}
 

3、使用 memcpy 函数:将一个结构体类型的内存空间复制到另一个结构体类型的内存空间。

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

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

int main() {
    Student stu1 = {1, "张三", 95.5};
    Student stu2;
    memcpy(&stu2, &stu1, sizeof(Student)); // 将结构体变量stu1的内存空间复制到stu2的内存空间

    printf("学生1的ID: %d, 姓名: %s, 成绩: %.2f
", stu1.id, stu1.name, stu1.score);
    printf("学生2的ID: %d, 姓名: %s, 成绩: %.2f
", stu2.id, stu2.name, stu2.score);

    return 0;
}
 

二、使用结构体数组

2.1定义结构体数组

结构体数组是指由多个相同类型的结构体组成的数组。定义结构体数组的语法如下:

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

struct 结构体名 数组名[数组大小];

例如,定义一个表示学生信息的结构体数组:

#include <stdio.h>

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

int main() {
    struct Student students[3] = {
        {"张三", 18, 90.5},
        {"李四", 19, 85.0},
        {"王五", 20, 92.5}
    };

    for (int i = 0; i < 3; i++) {
        printf("学生%d的信息:姓名:%s,年龄:%d,成绩:%.2f
", i + 1, students[i].name, students[i].age, students[i].score);
    }

    return 0;
}

三、结构体指针

3.1指向结构体变量的指针

指向结构体变量的指针是一个变量,它的类型是指向该结构体类型的指针。通过这个指针,我们可以访问和操作结构体变量的成员。

下面是一个指向结构体变量的指针的例子:

#include <stdio.h>

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

int main() {
    struct Student student1 = {"张三", 18, 90.5};
    struct Student *student_ptr = &student1; // 创建一个指向结构体变量的指针

    printf("学生姓名:%s\n", student_ptr->name); // 通过指针访问结构体变量的成员
    printf("学生年龄:%d\n", student_ptr->age);
    printf("学生成绩:%.2f\n", student_ptr->score);

    return 0;
}
 

在这个例子中,我们定义了一个名为 Student 的结构体类型,包含三个成员变量: name 、 age 和 score 。然后我们创建了一个名为 student1 的结构体变量,并使用 & 运算符获取其地址,将其赋值给一个名为 student_ptr 的指针变量。最后,我们通过 student_ptr 指针访问和输出了结构体变量的成员。

3.2指向结构体数组的指针

指向结构体数组的指针是一个变量,它的类型是指向该结构体类型的指针。通过这个指针,我们可以访问和操作结构体数组的元素。

下面是一个指向结构体数组的指针的例子:

 
#include <stdio.h>

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

int main() {
    struct Student students[3] = {
        {"张三", 18, 90.5},
        {"李四", 19, 85.0},
        {"王五", 20, 92.5}
    };
    struct Student *student_ptr = students; // 创建一个指向结构体数组的指针

    for (int i = 0; i < 3; i++) {
        printf("学生%d姓名:%s\n", i + 1, student_ptr[i].name); // 通过指针访问结构体数组的元素
        printf("学生%d年龄:%d\n", i + 1, student_ptr[i].age);
        printf("学生%d成绩:%.2f\n", i + 1, student_ptr[i].score);
    }

    return 0;
}
 

在这个例子中,我们定义了一个名为 Student 的结构体类型,包含三个成员变量: name 、 age 和 score 。然后我们创建了一个长度为3的 Student 结构体数组 students ,并使用 students 初始化一个名为 student_ptr 的指针变量。最后,我们通过 student_ptr 指针遍历结构体数组,输出每个元素的成员信息。

3.3用结构体变量和结构体变量的指针作函数参数

结构体变量和结构体变量的指针都可以作为函数参数。下面是一个示例:

#include <stdio.h>

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

void print_student(struct Student s) {
    printf("姓名:%s\n", s.name);
    printf("年龄:%d\n", s.age);
    printf("成绩:%.2f\n", s.score);
}

void print_student_pointer(struct Student *s) {
    printf("姓名:%s\n", s->name);
    printf("年龄:%d\n", s->age);
    printf("成绩:%.2f\n", s->score);
}

int main() {
    struct Student stu1 = {"张三", 18, 90.5};
    struct Student *stu2 = &stu1;

    print_student(stu1);
    print_student_pointer(stu2);

    return 0;
}
 

在这个示例中,我们定义了一个名为 Student 的结构体类型,包含三个成员变量: name 、 age 和 score 。然后我们定义了两个函数 print_student 和 print_student_pointer ,分别接受一个结构体变量和一个指向结构体变量的指针作为参数。在 main 函数中,我们创建了一个 Student 类型的变量 stu1 和一个指向 Student 类型的指针 stu2 ,并将它们分别传递给这两个函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值