结构体

先来说明一下,结构体存在的意义。比如说有一只猫,要在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. 存储过程存储过程需要用两个'',先where再Group,再Order by

    存储过程需要用两个'',先where再Group,再Order by  未完,待续

  2. Python学习---抽屉框架分析[点赞功能分析]

    实际上就是多了一个隐藏的span标签,内容是+1,配合setInterval实现的动态效果 settings.py INSTALLED_APPS = [ ... 'app01', # 注册app ] ...

  3. 异常处理与MiniDump详解(3) SEH(Structured Exception Handling)

    write by 九天雁翎(JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 一.   综述 SEH--Structured Exception Handlin ...

  4. PetaPoco轻量级ORM框架 - Database API 手册

    PetaPoco Database API #region IDisposable public void Dispose() #endregion #region Constructors publ ...

  5. Scala编程实例:使用List和Tuple

    本文节选自Martin Odersky,Lex Spoon和Bill Venners所著,Regular翻译的<Programming in Scala>的第三章.Scala是一种针对 J ...

  6. RedisClient的安装及基本使用

    管理redis的可视化客户端目前较流行的有三个:Redis Client ; Redis Desktop Manager ; Redis Studio. 这里目前给大家介绍Redis Client 的 ...

  7. 第04章-VTK基础(7)

    [译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年.ISBN: 978-1-930934- ...

  8. thinkphp3.2.3代码审计

    <?php namespace Home\Controller; use Think\Controller; class UserController extends Controller { ...

  9. F、CSL 的神奇序列 【规律】 (“新智认知”杯上海高校程序设计竞赛暨第十七届上海大学程序设计春季联赛)

    题目传送门:https://ac.nowcoder.com/acm/contest/551/F 题目描述 CSL 有一个神奇的无穷实数序列,他的每一项满足如下关系: 对于任意的正整数 n ,有 n∑k ...

  10. # 20155214 2016-2017-2 《Java程序设计》第9周学习总结

    20155214 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 JDBC架构 JDBC全名Java DataBase Connectivity,是用于执行S ...