C语言-基础语法学习-6 结构体

目录

    • 结构体
      • C语言结构体及相关函数
        • 结构体(Structures)
        • 结构体的使用
        • 结构体函数参数传递
        • 结构体指针
        • 结构体函数返回值
        • 相关函数

结构体

在C语言中,结构体(struct)是一种用户自定义的数据类型,用于组合多个不同类型的变量成员,以便表示一个复杂的数据结构。

结构体的定义使用struct关键字,其语法格式如下:

struct StructName {
    member1;
    member2;
    ...
};

其中,StructName为结构体的名称,member1member2等为结构体的成员,可以是不同的数据类型,也可以是其他结构体或共用体。

结构体的特点包括:

  1. 封装多个变量: 结构体可以包含多个不同类型的变量成员,可以用于组合和封装相关的数据。

  2. 自定义数据类型: 结构体的定义实际上是创建了一种新的数据类型,可以像基本数据类型一样使用结构体类型的变量。

  3. 成员访问: 可以使用点运算符.来访问结构体的成员,通过结构体变量名和成员名进行访问。

  4. 大小计算: 结构体的大小取决于其成员的大小和对齐规则。结构体的大小是其所有成员大小的总和,但也受到编译器对内存对齐的规则限制。

结构体的应用场景包括:

  1. 表示复杂数据结构: 结构体可以用于表示复杂的数据结构,如学生信息、员工记录等,将相关的数据组织在一起方便处理。

  2. 传递多个参数: 结构体可以作为函数的参数,将多个相关的参数打包成一个结构体参数传递,简化函数调用。

  3. 数据封装: 结构体可以用于封装一组相关的数据,提高代码的可读性和维护性。

需要注意的是,结构体可以嵌套定义,即在结构体中可以包含其他结构体或自身的指针成员,以构建更复杂的数据结构。

以下是一个结构体的示例:

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

在上述示例中,定义了一个名为Person的结构体,包含了三个成员:nameageheight,分别表示人的姓名、年龄和身高。可以使用该结构体来创建结构体类型的变量,并对其成员进行访问和操作。

struct Person p1;
strcpy(p1.name, "John");
p1.age = 25;
p1.height = 175.5;

通过点运算符.可以访问结构体的成员:

printf("Name: %s\n", p1.name);
printf("Age: %d\n", p1.age);
printf("Height: %.1f\n", p1.height);

输出结果:

Name: John
Age:

 25
Height: 175.5

这样就可以方便地使用结构体来组织和操作相关的数据。

  • 通过结构体变量名访问,用点(成员选择(对象))运算符

  • 通过结构体指针间接访问,先取内容为结构体,然后用点(成员选择(对象))运算符

  • 通过结构体指针间接访问,用->(成员选择(指针))运算符

struct Test {
    int idata;
    char cdata;
};
int main()
{
    struct Test t = {10, 'c'};
    struct Test *p = &t;
    
    //三种访问结构体成员方法
    printf("%d\n", t.idata);
    printf("%d\n", (*p).idata);  //点的优先级比*高,需要加括号
    printf("%d\n", p->idata);
    
    return 0;
}

C语言结构体及相关函数

结构体(Structures)

在C语言中,结构体是一种用户自定义的数据类型,允许将不同类型的数据项组合在一起,形成一个新的复合类型。结构体由多个成员变量组成,每个成员变量可以是不同的数据类型。结构体可以用于表示现实世界中的实体,如人员、学生、车辆等,以及组织复杂的数据结构。

定义结构体的语法如下:

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

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

struct Student {
    int id;
    char name[50];
    int age;
    float gpa;
};
结构体的使用

结构体定义后,可以声明结构体类型的变量,并访问结构体的成员变量。使用点运算符(.)来访问结构体的成员。

例如,创建一个学生结构体变量并赋值:

struct Student student1;  // 声明一个学生结构体变量
student1.id = 1;          // 设置学生ID
strcpy(student1.name, "John");  // 设置学生姓名
student1.age = 20;       // 设置学生年龄
student1.gpa = 3.8;      // 设置学生GPA
结构体函数参数传递

结构体可以作为函数的参数传递,可以通过传值或传引用的方式进行。当结构体作为函数参数传递时,可以直接传递结构体变量,或者传递结构体的指针。

例如,定义一个接收学生结构体作为参数的函数:

void printStudent(struct Student stu) {
    printf("ID: %d\n", stu.id);
    printf("Name: %s\n", stu.name);
    printf("Age: %d\n", stu.age);
    printf("GPA: %.2f\n", stu.gpa);
}

调用该函数并传递学生结构体变量:

struct Student student1;
// 设置学生信息
printStudent(student1);
结构体指针

结构体指针用于存储结构体变量的地址,可以通过指针来访问和修改结构体的成员变量。

例如,创建一个指向学生结构体的指针并访问成员变量:

struct Student student1;
struct Student* ptr = &student1;  // 指向学生结构体的指针
(*ptr).id = 1;  // 通过指针访问结构体成员变量,需要使用解引用符号(*)
ptr->age = 20;  // 可以使用箭头符号(->)来访问结构体成员,等价于 (*ptr).age
结构体函数返回值

函数可以返回结构体作为结果。可以通过直接返回结

构体变量或者返回结构体指针的方式来实现。

例如,定义一个返回学生结构体的函数:

struct Student createStudent(int id, char name[], int age, float gpa) {
    struct Student stu;
    stu.id = id;
    strcpy(stu.name, name);
    stu.age = age;
    stu.gpa = gpa;
    return stu;
}

调用该函数并接收返回的学生结构体:

struct Student student1 = createStudent(1, "John", 20, 3.8);
相关函数

此外,C语言提供了一些库函数用于操作字符串、文件等,可以用于读取和处理结构体数据。

  • strcpy:字符串拷贝函数,用于将一个字符串复制到另一个字符串。
  • fopen:文件打开函数,用于打开文件。
  • fscanf:文件扫描函数,用于从文件中读取格式化数据。
  • fclose:文件关闭函数,用于关闭文件。

这些函数可以配合结构体使用,实现从文件读取数据到结构体,或将结构体数据写入文件的功能。

以上是关于C语言结构体及相关函数的简要介绍。结构体提供了一种灵活的数据组织方式,可以更好地表示和操作复杂的数据结构。在实际应用中,结构体经常用于管理和处理多个相关的数据项。

你可能感兴趣的:(C语言上官,c语言,学习,算法)