C语言 结构体(Struct)详解及示例代码

C语言 结构体(Struct)详解及示例代码

什么是结构体(struct)?

结构体是C语言中一种构造类型(Compound Type),它可以将多个不同类型的变量组合成一个整体,方便在程序中进行操作。

一个结构体可以包含任意数量的成员变量,每个成员变量可以是基本类型,也可以是其他结构体类型。结构体定义语法如下:

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

在定义结构体时,我们需要指定结构体的名称,并列举其中的成员变量及其类型。这些成员变量的定义方式和声明普通变量的方式相同。

如何使用结构体?

定义好结构体之后,我们可以声明一个或多个该类型的变量,并使用.运算符来访问其中的成员变量。例如:

#include <stdio.h>

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

int main() {
    struct Student stu1 = {"Alice", 18, 90.5}; // 初始化结构体变量
    struct Student stu2; // 声明结构体变量

    stu2 = stu1; // 结构体变量之间可以直接赋值
    printf("%s的年龄是%d,成绩是%.1f\n", stu1.name, stu1.age, stu1.score);
    printf("%s的年龄是%d,成绩是%.1f\n", stu2.name, stu2.age, stu2.score);

    stu2.age = 19; // 可以单独修改结构体中的某个成员变量
    printf("%s的年龄是%d\n", stu2.name, stu2.age);

    return 0;
}

在上面的代码中,我们定义了一个Student结构体,包含名字、年龄和成绩三个成员变量。在main函数中,我们声明了两个该类型的变量stu1stu2。我们使用了初始化的方式为stu1变量的成员变量赋值,然后使用赋值操作符将stu1的值赋给stu2,这说明结构体变量之间完全可以实现赋值操作。

我们使用.运算符可以访问结构体变量中的每一个成员变量。例如,在上面的代码中,使用stu1.name可以获取stu1变量的名字属性,使用stu2.age可以获取stu2变量的年龄属性。我们还可以通过单独修改某个成员变量来修改结构体中的数据。

结构体示例1:计算图形面积

下面通过一个示例来说明如何使用结构体计算图形的面积。

首先,我们定义表示三角形、矩形和圆形的结构体:

struct Triangle {
    float bottom;
    float height;
};

struct Rectangle {
    float width;
    float height;
};

struct Circle {
    float radius;
};

然后,我们编写计算这些图形面积的函数:

#define PI 3.14159

float calcTriangleArea(struct Triangle t) {
    return t.bottom * t.height / 2;
}

float calcRectangleArea(struct Rectangle r) {
    return r.width * r.height;
}

float calcCircleArea(struct Circle c) {
    return PI * c.radius * c.radius;
}

这里我们分别定义了三个计算面积的函数,分别接收一个TriangleRectangleCircle类型的参数,返回对应图形的面积。

最后我们在主函数中可以这样调用这些函数:

int main() {
    struct Triangle t = {3, 4};
    struct Rectangle r = {5, 6};
    struct Circle c = {2};

    printf("三角形的面积是%.2f\n", calcTriangleArea(t));
    printf("矩形的面积是%.2f\n", calcRectangleArea(r));
    printf("圆形的面积是%.2f\n", calcCircleArea(c));

    return 0;
}

在这段代码中,我们声明了三个图形变量trc,并传递给上面定义的三个函数进行面积计算。

结构体示例2:分离整数的小数部分和整数部分

下面我们通过一个示例来说明如何使用结构体将一个实数分解成小数部分和整数部分。

首先,我们定义一个名为Number的结构体:

struct Number {
    int integerPart;
    int decimalPart;
};

然后,我们编写一个接收一个实数参数,将其分解成整数部分和小数部分,放入Number结构体中返回的函数:

struct Number splitNumber(float num) {
    struct Number result;
    result.integerPart = (int)num;
    result.decimalPart = (int)((num - result.integerPart) * 100);

    return result;
}

在这个函数中,我们首先定义了一个名为resultNumber类型的变量。然后,我们先通过强制类型转换获取该实数的整数部分,将其存入integerPart成员变量中。接着,我们将实数减去整数部分,就可以获得小数部分,这里我们将其乘以100并强制转化为int类型后再将其存入decimalPart成员变量中。最后,我们将result返回。

我们在主函数中可以这样调用这个函数:

int main() {
    struct Number n = splitNumber(3.14159);
    printf("3.14159的整数部分是%d,小数部分是%d\n", n.integerPart, n.decimalPart);

    return 0;
}

我们传入一个实数3.14159来调用splitNumber函数,可以得到返回值中的整数部分是3,小数部分是14。

结束语

通过上面的示例,我们可以看到结构体在C语言中的强大之处,可以将不同类型的变量组合成一个整体是非常方便的。但需要注意的是,结构体的创建时需要预留足够的内存空间,不然会导致内存溢出,所以使用时需要谨慎一些。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言 结构体(Struct)详解及示例代码 - Python技术站

(0)
上一篇 2023年5月24日
下一篇 2023年5月24日

相关文章

  • 基于Matlab实现数字音频分析处理系统

    基于Matlab实现数字音频分析处理系统攻略 目录 背景简介 实现步骤 示例说明1:音频文件的读取和播放 示例说明2:音频信号的时域和频域分析 背景简介 数字音频处理是数字信号处理领域的一个重要方向,它主要涉及到音频信号的获取、存储、处理和播放等方面。为了更好地完成数字音频处理任务,基于Matlab的数字音频分析处理系统应运而生。该系统不仅可以实现音频文件的…

    C 2023年5月23日
    00
  • C语言求阶乘之和的三种实现方法(先阶乘再累加)

    当我们需要计算n的阶乘之和时,可以采用以下三种方法进行实现: 方法一:单层for循环 在本方法中,我们可以将for循环的条件直接设为i<=n即可,每次循环计算i的阶乘并加到sum中,最后输出sum即可。 示例代码: #include <stdio.h> int main() { int n, sum=0, factorial=1; prin…

    C 2023年5月23日
    00
  • 使用 Visual Studio 2022 开发 Linux C++ 应用程序的过程详解

    标题:使用 Visual Studio 2022 开发 Linux C++ 应用程序的过程详解 简介 Visual Studio 是一个面向开发人员的 IDE,可用于开发各种应用程序,其中就包括了 Linux C++ 应用程序的开发。 本文将详细介绍如何使用 Visual Studio 2022 开发 Linux C++ 应用程序。 步骤 步骤1:配置 Li…

    C 2023年5月23日
    00
  • win10应用程序中出现异常未知软件异常(0xe06d7363)的错误代码怎么办

    解决”win10应用程序中出现异常未知软件异常(0xe06d7363)的错误代码”这一问题的完整攻略如下: 1. 确认问题 第一步是确认问题。如果你的Windows 10系统中的应用程序出现了这个错误代码,那么这通常是由于某个应用程序组件出现了问题而导致的。这很可能是由于文件系统上的某种故障或应用程序使用的一些组件出现了问题而导致的。因此,首先要做的是确定哪…

    C 2023年5月23日
    00
  • 详解C语言的预处理效果

    详解C语言的预处理效果 C语言的预处理器是所有C编译器的一部分。在编译代码之前,预处理器会处理源代码文件,执行一系列指令,以生成最终的代码文件。本文将详细介绍C语言的预处理器是如何工作的,以及预处理器有哪些常用指令。 预处理器的基础知识 在C程序中,任何以#字符开头的行都是预处理器指令。预处理指令可以出现在代码的任何位置,但通常出现在源代码文件的顶部。预处理…

    C 2023年5月23日
    00
  • 网站出现50X类型、DNS及超时错误怎么办? 网站“抓取异常”问题的解决方案介绍

    针对网站出现50X类型、DNS及超时错误以及“抓取异常”问题,我为您提供以下解决方案介绍的攻略。 1. 网站出现50X类型、DNS及超时错误怎么办? 1.1 50X类型错误 50X类型错误指的是服务器端错误,通常是由于服务器出现了问题或者服务器无法完成对请求的处理。常见的50X类型错误包括500,503错误。 解决方案: 重启服务器 检查服务器的日志文件,查…

    C 2023年5月23日
    00
  • C语言大作业之图书管理系统的实现详程

    C语言大作业之图书管理系统的实现详程 概述 本文将详细讲解如何使用C语言编写一个简单的图书管理系统。该系统包含管理员和用户两种角色,主要实现以下功能:- 管理员:图书的添加、删除与修改- 用户:图书的查询、借阅、归还 系统设计 本系统由以下几个模块组成: main.c:主程序,实现系统的入口功能。 user.c:用户模块,实现用户相关的功能,如图书查询、借阅…

    C 2023年5月22日
    00
  • C++中异常机制的实现机制详解

    C++中异常机制的实现机制详解 异常(Exception)是指程序运行时出现的一些不可预知的错误,比如非法输入、内存分配失败等。异常处理机制可以让程序在遇到异常时不会立即崩溃,而是可以做一些处理,让程序能够在异常发生后继续执行。 C++中的异常处理机制分为三个部分:抛出异常、捕获异常和处理异常。下面我们来详细讲解它们的实现机制。 抛出异常 抛出异常使用thr…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部