初识结构体

结构体在C语言中允许不同类型的值集合,与数组不同。本文通过代码示例介绍了如何创建、初始化和赋值结构体,以及结构体变量间如何复制。同时指出结构体不能递归包含自身,但可以包含其他结构体。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

结构体就是一些值的集合,但是数组也是一些值的集合,但是结构体里的值的类型是可以不一样的,就比如说一个结构体里可以同时有char, int, short, long。

但是数组总不能说第一个元素放int第二个又放char类型吧,所以结构体是一些不同类型的值的集合。

下面就举个创建结构体类型的例子

#include<stdio.h>

struct book            //定义一本书
{
    char name[20];     //书名
    int page;          //页数    
};

怎么样简单吧,

那我们该如何使用它创建结构体变量呢?

一样上代码说明

#include<stdio.h>

struct BOOK       //定义一本书
{
    char name[20];     //书名
    int page;      //页数    
};

int main()
{
    struct BOOK book;            //结构体关键字+结构体名称+结构体变量名
}

上面这样就是创建了一个结构体变量,

结构体的类型可以是标量,数组,指针,甚至是其他结构体,

但是要注意的是不能自己包含自己的结构体。

包含其他结构体也直接上代码说明

#include<stdio.h>

struct people
{
    int age;                //年龄、体重、身高、性别
    int height;
    int weight;
    char Gender[10];
};

struct Student       //定义一个学生
{
    char name[20];       //学生名字
    long long num;   //学号
    struct people a;    //其他基本信息
};

那结构体变量该如何赋值呢?

可以像下面这样按顺序赋值

#include<stdio.h>

struct people
{
    int age;                //年龄、体重、身高、性别
    int height;
    int weight;
    char Gender[10];
};

struct Student           //定义一个学生
{
    char name[20];       //学生名字
    long long num;       //学号
    struct people a;     //其他基本信息
};

int main()
{
    struct Student A = { "张三",22222222,{30,120,200,"male"} };
}

也可以一个个赋值

如下面这样

#include<stdio.h>

struct people
{
    int age;                //年龄、体重、身高、性别
    int height;
    int weight;
    char Gender[10];
};

struct Student           //定义一个学生
{
    char name[20];       //学生名字
    long long num;       //学号
    struct people a;     //其他基本信息
};

int main()
{
    struct Student stu;
    stu.name[0] = 1;
    stu.num = 11111111;
    stu.a.age = 80;
    stu.a.height = 190;
    stu.a.weight = 190;
    stu.a.Gender[0] = 1;

}

简单吧

也可以通过scanf自行输入,讲到这顺便讲如何输出。

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

struct people
{
    int age;                //年龄、体重、身高、性别
    int height;
    int weight;
    char Gender[10];
};

struct Student           //定义一个学生
{
    char name[20];       //学生名字
    long long num;       //学号
    struct people a;     //其他基本信息
};

int main()
{
    struct Student stu;
    printf("姓名\n");
    gets(stu.name);
    printf("学号\n");
    scanf("%lld",&(stu.num));
    printf("年龄\n");
    scanf("%d",&(stu.a.age));
    printf("身高\n");
    scanf("%d",&(stu.a.height));
    printf("体重\n");
    scanf("%d",&(stu.a.weight));
    getchar("");
    printf("性别\n");
    gets(stu.a.Gender);
    printf("\n\n\n");
    printf("%s %lld %d %d %d %s",
        stu.name,
        stu.num,
        stu.a.age,
        stu.a.height,
        stu.a.weight,
        stu.a.Gender
        );
}

看看输出结果

 结果没问题

张三都这么老了还在上学

我们知道两个数组直接用 = 是不行的,如下,编译器直接报错。

#include<stdio.h>

int main()
{
    int a[10];
    int b[10];
    a = b;
}

但是两个相同的结构体变量是可以的,如下

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

struct people
{
    int age;                //年龄、体重、身高、性别
    int height;
    int weight;
    char Gender[10];
};

struct Student           //定义一个学生
{
    char name[20];       //学生名字
    long long num;       //学号
    struct people a;     //其他基本信息
};

int main()
{
    struct Student stu = {0};           
    struct Student stu2 = stu;         //直接等于简单粗暴
}

简单吧

关于初识结构体就讲到这啦,如果有什么不好的地方,不懂,错误,都可以说出来我会尽力解答和改正错误。

内容概要:本文主要介绍了MySQL元数据的概念及其获取方式。MySQL元数据是关于数据库和其对象(如表、列、索引等)的信息,存储在系统表中,这些表位于information_schema数据库中。文章详细列举了多种常用的MySQL元数据查询命令,如查看所有数据库(SHOW DATABASES)、选择数据库(USE database_name)、查看数据库中的所有表(SHOW TABLES)、查看表的结构(DESC table_name)、查看表的索引(SHOW INDEX FROM table_name)、查看表的创建语句(SHOW CREATE TABLE table_name)、查看表的行数(SELECT COUNT(*) FROM table_name)、查看列的信息以及查看外键信息等。此外,还介绍了information_schema数据库中的多个表,包括SCHEMATA表、TABLES表、COLUMNS表、STATISTICS表、KEY_COLUMN_USAGE表和REFERENTIAL_CONSTRAINTS表,这些表提供了丰富的元数据信息,可用于查询数据库结构、表信息、列信息、索引信息等。最后,文章还给出了获取查询语句影响的记录数的Perl和PHP实例,以及获取数据库和数据表列表的方法。 适合人群:对MySQL数据库有一定了解,想要深入学习MySQL元数据获取和使用的数据库管理员或开发人员。 使用场景及目标:①帮助用户掌握MySQL元数据的获取方法,以便更好地管理和维护数据库;②通过查询information_schema数据库中的系统表,深入了解数据库结构、表信息、列信息、索引信息等;③提供Perl和PHP实例,方便用户在不同编程环境中获取查询语句影响的记录数和数据库及数据表列表。 其他说明:在使用上述SQL语句时,请注意将查询中的'your_database_name'和'your_table_name'替换为实际的数据库名和表名。此外,在获取数据库和数据表列表时,如果没有足够的权限,结果将返回null。
经验模态分解(Empirical Mode Decomposition,EMD)是一种基于数据的信号处理技术,由Nigel Robert Hocking在1998年提出,主要用于分析非线性、非平稳信号。它能够将复杂的信号自适应地分解为若干个本征模态函数(Intrinsic Mode Function,IMF),每个IMF代表信号中不同的频率成分和动态特征。在MATLAB环境下实现EMD去噪,通常包括以下步骤: 信号预处理:对原始信号进行预处理,例如平滑处理或去除异常值,以提高后续分解的准确性。 EMD分解:利用EMD算法对预处理后的信号进行分解,将其拆分为多个IMF和一个残余项。每个IMF对应信号的一个内在频率成分,而残余项通常包含低频或直流成分。 希尔伯特变换:对每个IMF进行希尔伯特变换,计算其瞬时幅度和相位,形成希尔伯特谱,从而更直观地分析信号的时频特性。 去噪策略:常见的去噪策略有两种。一种是根据IMF的频率特性,选择保留低频或高频部分,去除噪声;另一种是利用IMF的Hurst指数,噪声IMF的Hurst指数通常较低,因此可以去除Hurst指数低于阈值的IMF。 重构信号:根据保留的IMF和残余项,通过逆希尔伯特变换和累加,重构出去噪后的信号。 Hurst分析:Hurst指数是评估时间序列长期依赖性的指标,用于区分随机性和自相似性。在EMD去噪中,Hurst分析有助于识别噪声IMF,从而提升去噪效果。 在提供的压缩包中,“license.txt”可能是软件的许可协议文件,用户需遵循其条款使用代码。“EMD-DFA”可能是包含EMD去噪和去趋势波动分析(Detrended Fluctuation Analysis,DFA)的MATLAB代码。DFA是一种用于计算信号长期自相关的统计方法,常与EMD结合,进一步分析信号的分形特征,帮助识别噪声并优化去噪效果。该MATLA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值