【数据结构】C语言结构体详解

简介: 【数据结构】C语言结构体详解


前言

结构体是C语言中一种自定义的数据类型,它允许开发者将不同类型的数据组合在一起,形成一个更复杂的数据结构,提高程序的灵活性和扩展性。本文将详细介绍C语言中结构体的基本概念、定义和使用方法,希望能够帮助读者更好地理解和应用结构体。


一、结构体的定义

在C语言中,结构体是一种用户自定义的数据类型,它允许我们将不同的数据类型组合在一起,创建一个具有自定义属性的复合数据类型。

结构体可以通过下面的语法进行定义:

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

例如,下面的代码定义了一个名为 Person 的结构体,其中包含了姓名、年龄和身高三个成员:

struct Person
{
  char name[50];
  int age;
  double height;
};

这个结构体可以用来描述一个人的基本信息。可以通过下面的语句来定义 Person 的一个实例:

struct Person person1; // 定义一个名为 person1 的 Person 类型的变量

然后就可以通过 . 运算符来访问结构体的成员,例如:

strcpy(person1.name, "Filotimo");
person1.age = 20;
person1.height = 1.80;

完整代码:

#include <stdio.h>
#include <string.h>
struct Person
{
  char name[50];
  int age;
  double height;
};
int main()
{
  struct Person person1;
  strcpy(person1.name, "Filotimo");
  person1.age = 20;
  person1.height = 1.80;
  printf("Person's name: %s\n", person1.name);
  printf("Person's age: %d\n", person1.age);
  printf("Person's height: %.2f\n", person1.height);
  return 0;
}

输出结果如下:

二、定义结构体变量

定义结构体变量的一般语法为:

struct 结构体名称 变量名称;

例如,定义一个包含姓名和年龄两个成员的结构体变量person可以这样写:

struct person {
    char name[20];
    int age;
} p;

上述代码用p作为person类型的结构体变量。我们可以通过访问p的成员来使用这些数据。

三、结构体变量的初始化

结构体变量初始化的示例代码:

struct person {
    char name[20];
    int age;
};
int main() {
    //一般初始化方法
    struct person p1 = {"小明", 18};
    //成员初始化
    struct person p2;
    strcpy(p2.name, "小红");
    p2.age = 20;
    return 0;
}

在p1的初始化中,我们直接使用花括号给出name和age的初始值;在p2的初始化中,我们分别对name和age进行了单独的初始化。

四、使用typedef声明新数据类型名

一般形式的typedef类型定义语句如下:

typedef existing_type new_type;

existing_type 是已经存在的数据类型,可以是基本类型(如 int、float、char 等),也可以是结构体、枚举等自定义类型;new_type 是你要定义的新的数据类型名。

以下是两个例子:

1.定义一个新的数据类型名,将 int 重命名为 Integer:

typedef int Integer;

2.定义一个新的数据类型名,将结构体重命名为 Student:

typedef struct {
    int id;
    char name[128];
    int age;
} Student;

五、指向结构体变量的指针

要声明一个指向结构体变量的指针,你可以使用结构体的类型作为指针的基类型,并在声明时使用星号(*)来表示这是一个指针。例如,假设有一个名为Person的结构体,包含name和age字段:

struct Person {
    char name[50];
    int age;
};

你可以声明一个指向Person结构体的指针如下:

struct Person *personPtr;

接下来,你可以通过结构体变量的地址来初始化指针变量,例如:

struct Person person;
personPtr = &person;

现在,personPtr指针指向了person结构体变量在内存中的位置。通过指针,你可以通过箭头运算符(->)来访问和修改结构体中的字段。例如,你可以使用以下语法来访问和修改name和age字段:

strcpy(personPtr->name, "Filotimo");
personPtr->age = 20;

这样就可以在不直接引用结构体变量的情况下,通过指针来操作结构体的字段了。

完整代码:

#include <stdio.h>
#include <string.h>
struct Person {
    char name[50];
    int age;
};
int main() {
    struct Person person;
    struct Person *personPtr;
    personPtr = &person;
    strcpy(personPtr->name, "Filotimo");
    personPtr->age = 20;
    printf("Name: %s\n", personPtr->name);
    printf("Age: %d\n", personPtr->age);
    return 0;
}

输出结果如下:


总结

结构体在C语言中扮演着重要的角色,它不仅可以提高程序的效率和可扩展性,还可以使代码更加模块化和易于理解。希望读者通过本文的学习,能够更加熟练地运用结构体来解决实际问题,提高自己的编程水平。

目录
相关文章
|
16天前
|
程序员 C语言
【C语言】初步认识结构体
【C语言】初步认识结构体
15 0
|
1天前
|
算法 C语言
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-2
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
1天前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
3天前
|
存储 编译器 程序员
C语言:自定义类型 - 结构体 & 联合体 & 枚举
C语言:自定义类型 - 结构体 & 联合体 & 枚举
10 2
|
6天前
|
存储 编译器 C语言
[C语言]自定义类型(结构体~枚举~联合体)
[C语言]自定义类型(结构体~枚举~联合体)
|
6天前
|
搜索推荐 C语言
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
【C语言/数据结构】排序(归并排序|计数排序|排序算法复杂度)
11 0
|
6天前
|
C语言
【C语言/数据结构】排序(快速排序及多种优化|递归及非递归版本)
【C语言/数据结构】排序(快速排序及多种优化|递归及非递归版本)
8 0
|
6天前
|
C语言
【C语言/数据结构】排序(选择排序,推排序,冒泡排序)
【C语言/数据结构】排序(选择排序,推排序,冒泡排序)
12 0
|
6天前
|
C语言
【C语言/数据结构】排序(直接插入排序|希尔排序)
【C语言/数据结构】排序(直接插入排序|希尔排序)
13 4
|
6天前
|
C语言
【C语言/数据结构】二叉树(层序遍历|判断完全二叉树|性质)
【C语言/数据结构】二叉树(层序遍历|判断完全二叉树|性质)
279 52