结构体

先来说明一下,结构体存在的意义。比如说有一只猫,要在C语言程序中综合描述它,那么可以这样说,它的体重是float类型的,颜色是char类型的,它的一些食物名字是一个数组,那么如果分开定义这些变量,他们将是零散的,只能通过命名放我们看起来方便一些,但是C语言为我们准备的结构体变量便很好的解决了这个问题。

结构体的声明

struct book{
float price;
char title[MAXTI];
char author[MAXAU];
};

这样来看,一个要被描述的事物的多种属性便可以放在一起了。其中,struct 是关键字,book便是这种结构体布局的名称,其中的price,title成为成员变量,这是最基本的声明结构体的方式,当然很少被按部就班的这样做~先往下走着。

定义结构体变量

按照上面的声明方式,我们可以定义这样的一个结构体变量library,或者更多。

struct book library,book1,book2;

所以我们看到,这样定义结构体变量,就像之前的int char一样,,我们必须写上struct book,那我们可以这样

typedef struct book{
float price;
char title[MAXTI];
char author[MAXAU];
}BOOK;

所以我们声明结构体时如果用了typedef,定义结构体变量便可以简洁一些,甚至我们可以在声明时不写小写的book都可以,这应该是最常用的方式,也可用下面两种方式:

struct book{
float price;
char title[MAXTI];
char author[MAXAU];
}book1,book2; struct {
float price;
char title[MAXTI];
char author[MAXAU];
}book1,book2;

初始化结构体

可以在声明时直接赋值,初始化,也可以在定义结构体变量时初始化

struct book{
float price=22.3;
char title[MAXTI]="C Primer Plus";
char author[MAXAU]="Stephen Prata";
};
BOOK library={22.3,"C Primer Plus","Stephen Prata"};

也可以先定义,用之前再初始化,都是一样的。

访问结构成员

既然我们用结构体把某些变量聚集在了一起,那我们用这些变量时,当然要体现一下它所属的结构体

float money;
money = library.price;

用到成员变量时,必须要    结构体名称+ . +成员变量    ,这样才可以。

声明结构数组

struct book ar_library[MAXLIB];

数组ar_library代替了以前的变量名。这样定义便说明,ar_library的每个元素都是一个book类型的结构体,引用时要写清楚

float money;
monry=ar_library[].price;

在一些芯片的底层封装函数中,会用到结构数组的方式定义成批的寄存器,比较方便,直观。

指向结构的指针

float money;
typedef struct book{
float price;
char title[MAXTI];
char author[MAXAU];
}BOOK;
BOOK book1;
BOOK * pbook;   //这就是一个指向结构的指针 pbook=&book1;
money = pbook->price;

这样便定义了一个指向结构的指针pbook,用到时先要把一个结构体变量的地址给指针,用的时候要  指针  ->  成员变量

个人认为指向指向结构的指针存在的意义在于传递结构体给函数时,让计算机不至于太累,编一个简单的程序体会一下

#include "stdio.h"
typedef stuct fund{
int a=;
int b=;
}NUM;
NUM num;
int sun(const stuct fund *);
int main(void)
{
printf("%d",sum(&num));
return ;
}
int sun (const struct fund *money)
{
return(money->a+money->b);
}

枚举

枚举类型用来声明符号来表示整形常量。字面理解好像不太直观。那就直接来看个应用的例子

enum spe{red,yellow,blue};//声明枚举
enum spe color; //定义枚举变量

enum是关键字,和结构体的 struct 很像,声明时就 enum+枚举类型名+{} ; ,其中的变量如果不初始化赋值,就从0开始往后加,在例子中,就是默认 red= 0,yellow=1,blue=2,当然也可以在声明时就赋值。定义枚举变量时,和结构体类似(typedef也可以仿照着用)。然后很重要的一点,定义枚举数组往往会有妙用,大家自行发掘。

所以我们可以看到,当一些变量有自己的意义时,我们用它的时候,就可以不用都#define,而是放到枚举中,它的名字就是它的值。而且在switch语句中,我们也可以很方便的调用。

飞控入门之C语言结构体、枚举的更多相关文章

  1. 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符

    [源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...

  2. 06. Go 语言结构体

    Go语言结构体(struct) Go 语言通过用自定义的方式形成新的类型,结构体是类型中带有成员的复合类型.Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性. Go 语言中的类 ...

  3. 漫谈C语言结构体struct、公用体union空间占用

    先用代码说话: #include<stdio.h> union union_data0{ int a ;//本身占用4个字节 char b ;//本身占用1个字节 int c ; }; u ...

  4. OC基础--结构体 枚举做类成员属性

    结构体  枚举作类的成员属性: 定义一个学生类 性别 -- 枚举 生日 入学日期  毕业日期  --  结构体 代码示例: 声明文件 Student.h: #import <Foundation ...

  5. 解析C语言结构体对齐(内存对齐问题)

    C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...

  6. Go语言结构体(struct)

    Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比如保存图 ...

  7. C语言结构体定义的几种方法

    什么是结构体? 在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类.结构体可以被声明为变量.指针或数组等,用以实现较复杂的数据 ...

  8. 对嵌入式开发C语言结构体的一点总结

    今天冬至居然不上班,公司的良心啊!这回有心情写博客和日志了,好了,废话不多说.直接看下文: 鉴于嵌入式开发过程中,C语言结构体的使用当然是必不可少.话说,基础什么的比你会更牛逼的算法更重要,基础不牢, ...

  9. C语言结构体变量私有化

    操作系统 : CentOS7.3.1611_x64 gcc版本 :4.8.5 问题描述 C语言结构体定义中的变量默认是公有(Public)属性,如果实现成员变量的私有(Private)化? 解决方案 ...

随机推荐

  1. Navicat for mysql 导出导入的问题

    问题现象   1:使用navicat 导出5.6.20版本数据库,然后导入到5.7.19mysql出现错误:  

  2. linux 下MySQL的安装

    一.安装MySQL   1.下载源码包     从mysql官网上下载linux下的source包mysql-5.0.51b.tar.gz,注意是下载GNU tar格式的,不是rpm包.    2.解 ...

  3. linux,强大的history命令

    如果你经常使用 Linux 命令行,那么使用 history(历史)命令可以有效地提升你的效率.本文将通过实例的方式向你介绍 history 命令的 15 个用法. 使用 HISTTIMEFORMAT ...

  4. redis下的字符串处理

    redis设计一款sds对象[字符串对象] 优点:可跨平台的内存处理zmalloc:内存消耗的线性增长优势:每次加SDS_MAX_PREALLOC(1MB)的空间: 重写了各种字符串操作的函数: 写跨 ...

  5. PetaPoco轻量级ORM框架 - 入门安装

    PetaPoco 是一个开源轻量级ORM,够小,够快,单文件 在GitHub上有很高的人气 1377星,几年来作者一直在更新 当前版本6.0.317 - Netstandard 2.0(同时支持.ne ...

  6. python正则二

    在python中,我们可以使用re模块来使用正则表达式. 正则表达式使用\对特殊字符进行转义,因为python本身也是用\作为转义,所以在使用正则的时候会出现这样的情况,'python\\.org', ...

  7. BZOJ 1059 矩阵游戏 二分图匹配

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1059 题目大意: 小Q是一个非常聪明的孩子,除了国际象棋,他还很喜欢玩一个电脑益智游戏 ...

  8. 超慢速移动动画使用CSS3实现流畅效果

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaHVpbGVpZm9yZXZlcg==/font/5a6L5L2T/fontsize/400/fill/I0 ...

  9. Sublime Text 3中文乱码问题解决

    Sublime Text 3是我MacBook Pro最喜欢的代码编辑器,没有之一,因为她的性感高亮代码配色,更因为它的小巧,但是它默认不支持GBK的编码格式,因此打开GBK的代码文件,如果里面有中文 ...

  10. js中时间的操作

    var myDate = new Date();myDate.getYear();        //获取当前年份(2位)myDate.getFullYear();    //获取完整的年份(4位,1 ...